1. 程式人生 > 程式設計 >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,)).start()
  else:
   print('輸入有誤')
  break


if __name__ == '__main__':
 main()

該程式碼只能實現要麼一直髮送,要麼一直接收

執行如圖

傳送資料時截圖

接收資料時截圖

為解決只能單方傳送和接收問題,現將程式碼修改如下

from socket import *
import threading
tcp_socket = socket(AF_INET,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,)).start()
threading.Thread(target=rece_msg,)).start()

執行結果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。