900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 网络聊天室_TCP服务端

网络聊天室_TCP服务端

时间:2022-07-14 04:11:35

相关推荐

网络聊天室_TCP服务端

初学Python记录点滴生活_1

ps:正经人谁写日记?

网络聊天室_TCP服务端

具体实现步骤

1.编写一个TCP服务端程序,循环等待接受客户端的连接请求

2.当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞

3.把创建的子线程设置成为守护主线程,防止主线程无法退出。

#多线程import threading#套接字import socket#创建一个用来存储客户端IP和端口的列表socket_list = []#定义函数,传入客户端的IP和端口def friends(new_client_socket,ip_port):#建立循环连接与接收while True:#捕捉客户端下线,防止客户端下线报错中断程序try:#接收客户端发送的数据recv_content = new_client_socket.recv(1024)#抛出错误,提示客户端下线except Exception as error:print(error)socket_list.remove(new_client_socket)print(ip_port,'客户端已下线')break#转译接收到的数据if recv_content:print('接收到', ip_port,'的消息:',recv_content.decode('UTF-8'))#循环遍历客户端的信息,取出客户端的IP和端口号for client_socket in socket_list:#如果这个客户端不是发送方,就将内容转发给其他客户端if client_socket != new_client_socket:client_socket.send(recv_content)#关闭接收客户端的服务new_client_socket.close()if __name__ == '__main__':#创建套接字tcp_serive_socket = socket.socket()#将不再使用的端口立即释放tcp_serive_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)#传入IP和端口号,IP为空自动寻找可用IPtcp_serive_socket.bind(('',8090))#设置监听tcp_serive_socket.listen(128)while True:#将接受到的客户端IP和端口号取出new_client_socket,ip_port= tcp_serive_socket.accept()#将客户端的IP和端口号写入列表socket_list.append(new_client_socket)#开启多线程,并守护主线程friend=threading.Thread(target=friends,args=(new_client_socket,ip_port),daemon=True)#启动聊天室服务friend.start()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。