簡體   English   中英

如何解決python中TCP套接字中客戶端部分的阻塞問題?

[英]How can I solve the blocking problem on the client part in a TCP socket in python?

我有一個TCP python客戶端,它用C ++請求TCP服務器。 我無法訪問服務器,因此無法更改服務器部分的任何代碼。 問題是有時客戶端發出的請求沒有收到服務器部分的任何數據,因此程序在data = sock.recv(1024)行中被阻止。 所以我想知道如何解決這個問題。 我嘗試在該行之后放置條件,如果沒有收到數據,但我無法傳遞data = sock.recv(1024)行。

try:
    data = sock.recv(12)  # this always gets data, it is a message send by the server that verifies the connection is alright
    print("Received: ", ":".join("{:02x}".format(c) for c in data))
    data = sock.recv(1024) 
    print("Received: ", ":".join("{:02x}".format(c) for c in data))
except IOError as e:
    pass

您需要使用socket.settimeout(N)socket.setdefaulttimeout(N)為阻塞操作設置超時。 以這種方式,如果沒有收到數據,則操作將在N秒后失敗。

第二種選擇是使用非阻塞IO

暫無
暫無

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

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