一、前言
上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户端呢?
二、发送中文信息
在python3中,socket只能发送bytes类型的数据,bytes类型只能表示0-225的ASCII码的值,并不能表示中文,所以当我们需要发送中文时,需要使用到编码和解码。
客户端:
importsocket#客户端
#声明协议类型,同时生成socket对象
client =socket.socket()#client.connect(('localhost', 8888))#python3 接收字节流数据
msg = input('>>:').strip()
client.send(msg.encode('utf-8')) #先编码成utf-8格式
data = client.recv(1024) #1024字节的数据
print(data)print(data.decode())
View Code
服务端:
importsocket#声明协议类型
server=socket.socket()#绑定本地网卡(多网卡选择),端口
server.bind(('localhost', 8888))#监听端口
server.listen() #监听
#conn 就是客户端连接后,在服务器端为其生成的一个连接实例#address 是客户端的 hostaddr,port
conn, address=server.accept()print("进入等待时间....")#等待#print(conn, address)
print("收到连接....")#接收数据
data_server = conn.recv(1024)print('receive:', data_server.decode()) #解码#返回一个值
conn.send(data_server)
View Code
三、Socket实现多个连接
这个事例需要在Linux环境下测试,在windows中测试时,多个客户端同时连接(也就是同时运行多个socket_client.py程序),其中一个断开,服务端会报错。Linux环境python版本为3.5