server端
#select 函数的简单示例
from socket import *
from select import *
server = socket() #创建套接字
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #设置监听
server.bind(('0.0.0.0',9999))
server.listen(5)
print("服务器已启动")
#定义三个列表,存放读,写,异常三类IO的列表
rlist = [server]
wlist = []
xlist = []
while True:
rs,ws,xs = select(rlist,wlist,xlist)
for r in rs:
print("r=",r)
if r is server:
client,addr=server.accept()
print("connect from:",addr)
rlist.append(client) #连接上后,再次出发IO则是读写数据,所以加到读列表中,当然也可以同时加到写列表中。
else:
data = r.recv(1024)
if not data:
rlist.remove(r) #假定客户端发的数据则认为当前读操作结束时,移除。
continue
else:
print("收到的数据:",data.decode())
wlist.append(r) #加到写列表
for w in ws:
w.send("test Msg ".encode())
print("发送了消息")
ws.remove(w) #假定服务端发送一条数据后则认为当前写操作结束时,移除。
for x in xs:
pass
server.close()
client端
from socket import *
#创建tcp套接字
sockfd = socket()
#发起连接
server_addr = ('127.0.0.1',9999)
sockfd.connect(server_addr)
#消息收发
while True:
data = input(">>")
if not data:
break
sockfd.send(data.encode())
data = sockfd.recv(1024)
print("From server:",data.decode())
sockfd.close()