跟上一篇一样,这篇也是对照着廖雪峰的python教程里面的代码来敲的:
该示例演示的是C-S服务模型,Server端接收来自客户端的请求,然后只是很简单地给客户端返回“Hello” + 来自客户端的原文。核心在于两端socket的创建和连接以及数据的发送和接收。
Server端:Server.py:
# -*- coding: utf-8 -*-
'''
Created on 2016年8月3日
@author: lv.lang
'''
import socket
import time, threading
#创建一个基于ipv4和TCP协议的Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#监听端口
s.bind(('127.0.0.1',9999)) #将socket绑定地址和端口
s.listen(5) #传入参数指定等待连接的最大数量
print('Waiting for connection...')
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
sock.close()
s.close()
print('Connection from %s:%s closed.' % addr)
#用一个永久循环来接受来自客户端的连接
while True:
#接受一个连接
sock, addr = s.accept()
#创建新线程来处理TCP连接
t = threading.Thread(target = tcplink, args = (sock, addr))
t.start()
(1)首先创建用于TCP连接的Socket
(2)将socket和地址及端口绑定
(3)监听端口
(4)用个死循环监听端口进来的数据
(5)每接收到一次数据都创建一个线程来处理
(6)对数据进行打包,返回给客户端
(7)关闭TCP连接
客户端Client.py:
# -*- coding: utf-8 -*-
'''
Created on 2016年8月3日
@author: lv.lang
'''
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('127.0.0.1', 9999))
# 接收欢迎信息
print(s.recv(1024).decode('utf-8'))
for data in [b'Michael', b'Tracy', b'Sarah']:
# 发送数据
s.send(data)
print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()
(1)首先创建用于TCP连接的Socket
(2)将socket和地址及端口绑定
(3)发送数据(4)接收数据,并将其打印
(5)关闭TCP连接
运行结果:
先运行Server.py:
再运行Client.py: