socket 实现多用户连接(肯定要用到线程啊,不会的学一下吧):
我就是为那些和我一样的菜鸟提供一下写的时候的思路,免得和我这个笨蛋一样浪费了一上午
import socket as sk
from threading import Thread
sever_socket = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
sever_socket.bind(("10.28.62.212", 8083))
sever_socket.listen(4000)
print("已将启动监听")
users_socket = [] # 用来保存与用户链接的套接字
# --------------------------启动服务端-----------------------------------------------------------------------------------
def one_user_communicate(socket):
recv_image = socket.recv(1024)
recv_image = recv_image.decode("gbk")
print(recv_image)
send_image = "sss"
send_image = send_image.encode("gbk")
socket.send(send_image)
def threading_communicate():
global users_socket # 便于连接一次立即删除
while True:
# 为了避免下一轮的user_socket与本轮的user_socket 重复,即为一个用户链接了两回,要在每一个线程的最后删去user_socket
for i in users_socket:
threading_user_socket = Thread(target=one_user_communicate, args=(i,))
threading_user_socket.start()
users_socket.remove(i) # 线程已经启动,删除也不影响.
threading_users_socket = Thread(target=threading_communicate)
if __name__ == "__main__":
threading_users_socket.start() # 定义多用户如何链接
# ---------------------------------------------------------------------用来保存用户对话的一个线程----------------------
while True:
user_socket, user_address = sever_socket.accept()
users_socket.append(user_socket)