Python多线程TCP客户端实现双向通信

宋时安
宋时安
发布时间:2026-10-13 | 1人浏览过
原创

本文介绍如何使用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客户端实现双向通信的完整内容,希望能为读者的学习提供有益参考,同时也欢迎大家继续关注与支持本站的技术分享。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表