[英]Python socket not processing all commands
我一直在致力於實現UDP套接字程序(基本上是服務器/客戶端類型的想法)。 我遇到了一個問題,當服務器從客戶端收到一條消息時,將代碼跟隨到一個點,然后又停止,然后下次服務器再次從客戶端收到另一條消息時,它將完成對上一個命令的處理請求,然后再次停止並重復。 這可能沒有意義,但我將嘗試用代碼進行解釋。
def receive():
conn_list = connections()
routes = []
sender = -1
read, write, errors= select.select(conn_list,[],[])
data = None
for sock in read:
data, addr = sock.recvfrom(1024)
print(data.decode('utf-8'))
print("hello")
def run():
filename = input("fielname? ")
route_table = create_table(filename)
while True:
receive()
該消息是"2. 2. 5. 15000. [4, 2]. [6, 1]"
(例如),因此每次命中服務器時控制台中的預期結果將是:
2. 2. 5. 15000. [4, 2]. [6, 1]
hello
但是,第一次運行時,我得到:
2. 2. 5. 15000. [4, 2]. [6, 1]
然后第二次,我得到:
hello
2. 2. 5. 15000. [4, 2]. [6, 1]
因此,兩次擊中服務器后的整個控制台如下所示:
2. 2. 5. 15000. [4, 2]. [6, 1]
hello
2. 2. 5. 15000. [4, 2]. [6, 1]
如果有人有任何想法,請先感謝您的幫助!
由於存在許多不一致之處,因此很難判斷此代碼段中發生了什么,但是在諸如read之類的Python命令中,recv被阻塞,直到(在您的情況下)讀取1024個字節或關閉套接字為止。 阻塞很可能是導致您所看到的行為的原因。
我懷疑您不想在每次發送后關閉套接字。
在這種情況下,我建議您嘗試以下操作:
在發送時沖洗套接字,以確保沒有緩沖
fd.flush()
使用'readline'代替讀取-如果數據流中有'換行' 或如果在發送中知道確切的數據大小,則這應該是非阻塞的,請使用小於1024的read / recv值...
data = fd.readline() data = sock.recvfrom(10)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.