【问题标题】:Python Problem With sockets套接字的 Python 问题
【发布时间】:2010-12-29 11:44:32
【问题描述】:

嘿,我正在尝试在 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()

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    将 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
    

    【讨论】:

      【解决方案2】:

      收到一堆数据后,您将其打印出来,然后接受一个新客户。所以老客户端的socket不再使用了。

      【讨论】:

        【解决方案3】:

        一旦您将数据读入data 变量,然后打印它,如果data 与“X”不同,connection 将超出范围并关闭。

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

        【讨论】:

        • 是的,但是如果客户端发送“aaa”,服务器会收到消息并打印它并且服务器不会关闭连接!客户端发送“www”后服务器不打印任何消息!但连接仍然有效!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        • 1970-01-01
        • 2011-07-28
        • 2011-07-09
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        相关资源
        最近更新 更多