簡體   English   中英

套接字的Python問題

[英]Python Problem With sockets

嗨,我嘗試用python創建一個簡單的Telnet服務器,但是服務器僅接收客戶端發送的一條命令...代碼:

from socket import *

server = socket(AF_INET, SOCK_STREAM)
server.bind((gethostname(), 23))
server.listen(5)

while 1:
   (connection, address) = server.accept()
   data = connection.recv(1024)
   print data
   if data=='X':
     break 

connection.close()

將server.accept置於while循環之外,將允許您的客戶端發送更多命令:

from socket import *

server = socket(AF_INET, SOCK_STREAM)
server.bind((gethostname(), 23))
server.listen(5)

(connection, address) = server.accept()
while 1:
    data = connection.recv(1024)
    print data
    if data=='X':
        break 

connection.close()

這樣做還有兩個問題:您的服務器僅允許一個客戶端。 只要連接了一個客戶端,其他客戶端就無法連接。 您可以通過使用線程(可能會很棘手)或使用select模塊來解決此問題。

telnet發送換行符,因此數據永遠不會是“ X”。 您可以檢查if data.strip() == 'X':

另外,如果您的客戶端斷開連接,則數據將為空字符串。 因此,您可能也想添加其他檢查:

if not data:
    break

收到一堆數據后,您將其打印出來,然后接受一個新的客戶端。 因此,不再使用舊客戶端的套接字。

data讀入data變量后,便進行打印,如果data與“ X”不同,則connection超出范圍並關閉。

您需要將該connection存儲在某個位置,然后在真正需要時關閉它(我想客戶端何時發送“退出” ...)。

暫無
暫無

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

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