服务器:
import socket
from multiprocessing import Process
from threading import Thread
user_dic = {}
def send_recv(client_conn, client_addr):
while 1:
# 接收客户端发送的消息
res = client_conn.recv(1024).decode("utf-8")
print("客户端发送的消息:" + res)
# 手动拼接用户字典中的key
tu = ("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服务socket
server_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 Thread
def 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()