簡體   English   中英

如何同時在python socket中發送和接收?

[英]How to send and receive in python socket at the same time?

我想通過 Python 中的套接字同時發送和接收信息。

您可以從下面的代碼中看到,我使用了threading但仍然無法正常工作。 我不知道是否有錯誤或我是否誤解了什么。

服務端代碼:

import socket
import threading as td# 導入 socket 模塊
def send():
    while True:     # 建立客戶端連接
        send_text=input('send:')
        c.send(send_text.encode('utf-8'))

def recv():
    while True:
        a=s.recv(1024).decode('utf8')
        print('servwe:',a)
while True:
    global t1
    global t2
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    address=('0.0.0.0',9000)              # 設置端口
    s.bind(address)        # 綁定端口
    s.listen(5)
    c,addr=s.accept()
    print('client device:',addr)# 等待客戶端連接
    t1=td.Thread(target=send())
    t2=td.Thread(target=recv)
    t1.start()
    t2.start()

客戶-

import socket               # 導入 socket 模塊
import threading as td
def recv():
    global data
    while True:
        a=s.recv(1024).decode('utf8')
        print('server:',a)
        t1.start()
            
def send():
    while True:     # 建立客戶端連接
        send_text=input('send:')
        s.send(send_text.encode('utf-8'))
        t1.start()
        t2.start()
while True:
    s = socket.socket(socket.AF_INET,         socket.SOCK_STREAM)   
     
    address=('192.168.68.115',9000)
    s.connect(address)      # 創建 socket 對象
    t1=td.Thread(target=send())
    t2=td.Thread(target=recv)
    t1.start()
    t2.start()

服務器和客戶端:

  • 不要將socket.socket(socket.AF_INET,…放入循環中。

  • 你錯誤地寫了t1=td.Thread(target=send())而不是t1=td.Thread(target=send) (所以調用而不是傳遞線程函數)。

  • 不要忽略斷開連接

     while True: a=s.recv(1024).decode('utf8')

    - 而是寫

     while a:=s.recv(1024).decode('utf8'):

服務器:

  • 你錯誤地寫了=s.recv(1024).decode('utf8')而不是=c.recv(1024).decode(…) (所以試圖使用服務器而不是客戶端連接套接字)。

客戶:

  • 不要嘗試多次啟動線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM