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()
答案 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
存储在某处并在需要时将其关闭(我猜客户端在'退出'时发送...)。