Python多线程TCP客户端实现双向通信
本文介绍如何使用Python的threading模块编写支持同时发送和接收数据的TCP客户端程序。针对原版代码仅能单向通信的问题,通过创建独立的发送与接收线程,实现数据的双向实时交互,并附带完整代码示例及运行效果说明。
Python多线程TCP客户端双向通信实现
在网络上搜索相关示例时,发现许多Python TCP客户端程序仅支持单向数据接收,功能较为局限。为了突破这一限制,本文选取了一个基础示例进行深入研究,并在此基础上进行了必要的修改与优化。
以下是原始代码的实现方式:
原始代码分析
from socket import *
import threading
tcp_socket = socket(AF_INET, SOCK_STREAM)
tcp_socket.connect(('192.168.1.102', 8080))
true = True
def rece_msg(tcp_socket):
global true
while true:
recv_msg = tcp_socket.recv(1024).decode("utf8")
if recv_msg == "exit":
true = False
print('接收到的信息为:%s' % recv_msg)
def send_msg(tcp_socket):
global true
while true:
send_msg = input('请输入要发送的内容')
tcp_socket.send(send_msg.encode('utf-8'))
if send_msg == "exit":
true = False
def main():
while True:
print('*'*50)
print('1 发送消息\n2 接收消息')
option = int(input('请选择操作内容'))
print('*'*50)
if option == 1:
threading.Thread(target=send_msg, args=(tcp_socket,)).start()
elif option == 2:
threading.Thread(target=rece_msg, args=(tcp_socket,)).start()
else:
print('输入有误')
break
if __name__ == '__main__':
main()
经测试,该原始代码存在明显缺陷,即在同一时刻只能执行发送或接收其中一种操作,无法实现双向并发通信。
程序运行界面如下图所示:
发送数据时的界面截图如下:


接收数据时的界面截图如下:


优化后的双向通信代码
为了解决上述只能单方发送或接收的问题,对代码逻辑进行了重构,修改后的代码如下:
from socket import *
import threading
tcp_socket = socket(AF_INET, SOCK_STREAM)
tcp_socket.connect(('192.168.1.102', 8080))
true = True
def rece_msg(tcp_socket):
global true
while true:
recv_msg = tcp_socket.recv(1024).decode("utf8")
if recv_msg == "exit":
true = False
print('接收到的信息为:%s\n' % recv_msg)
def send_msg(tcp_socket):
global true
while true:
send_msg = input('请输入要发送的内容\n')
tcp_socket.send(send_msg.encode('utf-8'))
if send_msg == "exit":
true = False
threading.Thread(target=send_msg, args=(tcp_socket,)).start()
threading.Thread(target=rece_msg, args=(tcp_socket,)).start()
修改后的程序运行结果如下:


以上即为Python多线程TCP客户端实现双向通信的完整内容,希望能为读者的学习提供有益参考,同时也欢迎大家继续关注与支持本站的技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













