【问题标题】:Python socket test recv() dataPython 套接字测试 recv() 数据
【发布时间】:2016-11-25 13:16:15
【问题描述】:

我的 python 脚本使用套接字时遇到问题。我想测试客户端是否使用正确的文件,而不是像 telnet 这样的其他工具。服务器:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while 1:
    conn, addr = s.accept()
    data = conn.recv(1024)
    if data == 'test':
        print 'ok'
    else:
        print '!'
        conn.close()

客户:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(HOST, PORT)
s.send('test')

客户端向服务器发送“测试”以验证它是正确的文件。 但是在客户端什么都不发送的情况下(如果客户端使用另一种连接方式),我无法测试 conn.recv(1024) 是否等于“测试”,因为脚本冻结,我需要等待客户端停止并服务器解冻。 提前谢谢你。

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    您可以使用select 函数来限制您的服务器等待新客户端连接或来自客户端的传入数据的时间:

    import socket
    import select
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    
    while 1:
    
        # wait up to 60 seconds that a client connects
        newClient,_,_ = select.select([s], [], [], 60)
    
        if not (newClient):
            # no client wanted to connect  
            print 'No new client in last 60 seconds!'
            return
        else:
            # new connection 
            print 'New client!'        
            conn, addr = s.accept()
            # wait up to 60 seconds that the client send data
            readable,_,_ = select.select([conn], [], [], 60)
            if (readable):
                data = conn.recv(1024)
                if data == 'test':
                    print 'ok'
                else:
                    print 'client do not send test'
            else:
                print 'client send nothing'
    
            # close connection
            conn.close()
    

    select

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2019-08-18
      • 2019-07-14
      • 2013-12-15
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多