2009-08-15 97 views
1

我試圖找到有關socket編程例子並且這個腳本來了: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py解釋套接字緩衝區請

當通過這個腳本讀取,我發現這條線: listenSocket.listen(5)

由於我明白了 - 從緩衝區讀取5個字節,然後用它做東西...

但是如果超過5個字節被另一端發送會發生什麼?

在該腳本的其他位置,它檢查輸入與4個命令並查看字符串中是否存在\ r \ n。不要像「外觀」加\ r \ n的命令超過5個字節?

艾倫

回答

12

以下是適用於一般的插座,但它應該幫助回答您關於使用套接字從Python的具體問題。

socket.listen()用於服務器套接字來偵聽傳入的連接請求。

傳遞給偵聽的參數被稱爲積壓它意味着套接字應接受多少個連接並將其放入掛起的緩衝區,直到完成對accept()的調用。這適用於在您調用listen()和完成匹配調用accept()之間等待連接到服務器套接字的連接。

因此,在您的示例中,您將待辦事項設置爲5個連接。

注意 ..如果您的積壓設置爲5個連接,下面連接(第六,第七等)將被丟棄,並安裝接管將收到錯誤連接消息(類似「主機積極拒絕連接」消息)

+0

正確 - 請參閱文檔以獲取詳細信息:http://docs.python.org/library/socket.html#socket.socket.listen – mark4o 2009-08-15 19:44:53

+0

謝謝。 我的確瞭解了它的錯誤,但是從同一個鏈接,上面... socket.recv(bufsize [,flags]) 緩衝區中其他發送的字節會發生什麼情況,以及如何確保所有關聯信息都是從緩衝? – 2009-08-15 19:49:16

+0

如果有更多的字節,那麼它們將保留在接收緩衝區中。再次致電recv閱讀更多。在你的示例程序中,它調用recv(1000),所以它將讀取多達1000個字節(如果沒有那麼多可用,則會減少)。 – mark4o 2009-08-15 19:54:05

0

這可以幫助你理解代碼:http://www.amk.ca/python/howto/sockets/

+0

這個鏈接已經死了,但[backback機器有它](http://web.archive .ORG /網絡/ 20090520040342/HTTP://www.amk.ca/python/howto/sockets/) – Russ 2011-07-25 16:57:49

0

的參數5listenSocket.listen不是讀或緩衝區的字節數,這是backlog

socket.listen(backlog)

監聽到 套接字進行的連接。 backlog參數指定 連接的最大排隊數量,並且應該至少爲1; 最大值是系統相關的 (通常爲5)。