# 没有测试 但是能运行 仅供小伙伴们参考 vs2017 w10
import socket
def main():
ser_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#注意 这里是是一个元祖 我老是忘
ser_socket.bind(("",12345))
ser_socket.listen(128)
ser_socket.setblocking(False)
cli_socket_list=list()
while True:
try:
new_client,new_client_addr=ser_socket.accept()
#因为这里是非阻塞 所以当没有链接请求时这里会产生异常
except Exception as Ex:
pass
else:
#设置新的客户端为非阻塞
new_client.setblocking(False)
cli_socket_list.append(new_client)
for cli_socket_single in cli_socket_list:
try:
new_client_content=cli_socket_single.recv(1024)
#这里同样 因为是非阻塞 会来看是否有数据 如果没有会产生异常
except Exception as Ex:
pass
else:
# 这里没有异常 这里有两种情况 一种是客户端使用close()关闭链接但是没有数据 一种是有数据
if new_client_content:
print(new_client_content)
else:
cli_socket_list.remove(cli_socket_single)
cli_socket_single.close()
if __name__=="__main__":
main()
python tcp服务器单线程非阻塞实现并发
最新推荐文章于 2024-05-01 12:30:00 发布