Python套接字问题

时间:2010-12-29 11:44:32

标签: python sockets

Hy,我试图在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()

3 个答案:

答案 0 :(得分:2)

在while循环之外使用server.accept将允许您的客户端发送更多命令:

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()

还有一些问题:您的服务器只允许一个客户端。只要连接了一个客户端,就没有其他客户端可以连接。 您可以通过使用线程(可能很难做到正确)或使用选择模块来解决这个问题。

telnet发送换行符,因此数据永远不会是'X'。您可以查看if data.strip() == 'X':

此外,如果您的客户端断开连接,则数据将为空字符串。所以你可能也想添加额外的支票:

if not data:
    break

答案 1 :(得分:1)

收到大量数据后,将其打印出来,然后接受新客户端。所以旧客户端的套接字不再使用了。

答案 2 :(得分:0)

一旦您将数据读入data变量,就会将其打印出来,如果data与“X”不同,则connection超出范围并关闭。

您需要将connection存储在某处并在需要时将其关闭(我猜客户端在'退出'时发送...)。