2016-05-23 54 views
0

我有這個客戶端Python程序,發送到Java服務器程序。 我的客戶在加入while循環之前工作正常。我需要添加一個while循環來繼續發送用戶輸入;現在,除非我殺死程序(Python客戶端),否則文本不會出現在另一端,那麼我在Python中輸入的所有文本都會出現在另一端,但只能在殺死程序後纔會出現!這是什麼原因?爲什麼要添加一個while循環導致意外的行爲?

import socket 

HOST = "192.168.0.76" 
PORT = 8080 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect((HOST, PORT)) 
while (True): 
    sock.sendall(raw_input("")) 
+0

您可能需要一個新線程才能發送消息。發生的事情是,您的程序在獲得發送任何內容之前重複循環來阻止所有消息。 –

+0

我想到了這一點,並且我添加了2秒的時間睡眠......沒有工作 – aero

+0

這是因爲這隻會暫停您所在的單個線程。 –

回答

0

socket docs以快看,我注意到有一個setsockopt()功能。如果您查看文檔(man setsockopt),則會有一個SO_SNDBUF標誌,它在發送時控制緩衝區大小。如果發送的數據不夠多,可能會在有更多數據時纔會刷新。

然而,似乎沒有成爲一個方式來刷新插槽(由於TCP幀大小),而這種相關答案可能給你一些更多的提示:Python Socket Flush

+0

在相關說明中,您是否考慮過使用websockets?它應該給你快速的小數據位通信,而不必處理這種低級別的東西。 – wli

-1

變化的環路:

while True: 
    input = raw_input("") 
    sock.send(input) 
+0

'sock.send'不保證發送給定的所有緩衝區,發送的字節數必須明確檢查,這種方法會導致數據丟失。 – donkopotamus

相關問題