服務器:
?
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()