服务器:
import socket
from multiprocessing import Process
from threading import Threaduser_dic = {}def send_recv(client_conn, client_addr):while 1:# 接收客户端发送的消息res = client_conn.recv(1024).decode("utf-8")print("客户端发送的消息:" + res)# 手动拼接用户字典中的keytu = ("127.0.0.1", int(res.split(":")[0]))# 通过key获得value 这个value是用户要发送的对方账户client_conn2 = user_dic.get(tu)# print("发送方:%s"% client_conn)# print("接收方:%s"% client_conn2)if client_conn2 is None:print("对方已下线!")else:message = "%s 账户对您说: %s \n" % (client_addr[1], res.split(":")[1])client_conn2.send(message.encode("utf-8"))if __name__ == '__main__':# 创建tcp服务socketserver_socket = socket.socket()# 绑定ip 端口server_socket.bind(("127.0.0.1", 9999))# 监听server_socket.listen()while 1:print("等待客户端连接....")# 接收客户端client_conn, client_addr = server_socket.accept()# 将接收到的信息存储到用户字典中user_dic[client_addr] = client_conn# 开启多进程Thread(target=send_recv, args=(client_conn, client_addr)).start()
客户端:
import socket
from multiprocessing import Process
from threading import Threaddef send_msg(client_socket):while 1:msg = input("请输入要发送的消息:\n")client_socket.send(msg.encode("utf-8"))def recv_msg(client_socket):while 1:msg = client_socket.recv(1024).decode("utf-8")print(msg)if __name__ == '__main__':client_socket = socket.socket()# 给客户端绑定id 端口client_socket.bind(("127.0.0.1", 8082))# 客户端连接服务器client_socket.connect(("127.0.0.1", 9999))print(client_socket.getsockname())Thread(target=send_msg,args=(client_socket,)).start()Thread(target=recv_msg, args=(client_socket,)).start()