import threading # 导入线程模块
# 启动多线程(多个线程共用一个Socket)
threading.Thread(target=send_msg, args=(Client,)).start()
threading.Thread(target=recv_msg, args=(Client,)).start()
# 多线程任务
def send_msg(Client): # 发送消息(任务线程)
while True:
send = input('>>>')
Client.send(send.encode('utf-8'))
def recv_msg(Client): # 接收消息(任务线程)
while True:
recvv = Client.recv(1024).decode('utf-8')
print("服务器:" + f'{recvv}')
1.服务端也一样,直接套用第一期代码,重复和客户端一样的操作给它定义两个线程,但与前者不同的是,服务端的线程需要写在监听列队的内在循环语句内,这样每次有客户端连接服务器时,accept( )会创建一个新的socket并传给多线程任务。
# 循环接纳客户端
while True:
socket, addr_info = Server.accept() # 返回值传参赋值
threading.Thread(target=send_msg, args=(socket,)).start()
threading.Thread(target=recv_msg, args=(socket,)).start()
print(f'{addr_info}' + "断开了与服务器的连接...")
# 多线程任务
def send_msg(socket): # 发送消息(任务线程)
while True:
msg = input(">>>")
socket.send(msg.encode('utf-8'))
def recv_msg(socket): # 接收消息(任务线程)
while True:
remsg = socket.recv(1024).decode('utf-8')
print("客户端:" + f'{remsg}')
if len(remsg) == 0:
break
# 这是客户端
import socket
import threading
# 创建Socket TCP对象
Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定目标服务器端地址
Client_address = (('127.0.0.1', 2023)) # IP地址为需要连接服务器的IP
# 连接目标服务器
Client.connect(Client_address)
print('---------------------------客户端--------------------------')
# 多线程任务
def send_msg(Client): # 发送消息(任务线程)
while True:
send = input('>>>')
Client.send(send.encode('utf-8'))
def recv_msg(Client): # 接收消息(任务线程)
while True:
recvv = Client.recv(1024).decode('utf-8')
print("服务器:" + f'{recvv}')
# 启动多线程(多个线程共用一个Socket
threading.Thread(target=send_msg, args=(Client,)).start()
threading.Thread(target=recv_msg, args=(Client,)).start()
2.Server.py:
# 这是服务器端
import socket
import threading
# 创建Socket TCP对象
Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Server.bind(('', 2023)) # 绑定本地端口
print('---------------------------服务器端--------------------------')
# 启动监听列队
Server.listen(5)
# 多线程任务
def send_msg(socket): # 发送消息(任务线程)
while True:
msg = input(">>>")
socket.send(msg.encode('utf-8'))
def recv_msg(socket): # 接收消息(任务线程)
while True:
remsg = socket.recv(1024).decode('utf-8')
print("客户端:" + f'{remsg}')
if len(remsg) == 0:
break
# 循环接纳客户端
while True:
socket, addr_info = Server.accept() # 返回值传参赋值
threading.Thread(target=send_msg, args=(socket,)).start()
threading.Thread(target=recv_msg, args=(socket,)).start()
print(f'{addr_info}' + "客户端与与服务器连接成功...")