Python3客户端套接字收到的消息不完整

时间:2018-10-16 01:09:08

标签: python python-3.x sockets

我正在尝试使用Python套接字向我的远程服务器发送命令。我的远程服务器在端口50000上侦听(服务器套接字未配置python)。当我登录到服务器并回显命令时,我希望获得正确的结果,如下所示:

echo mycommand | nc 127.0.0.1 50000

我将三行返回到stdout:

>ServerOn=
>Command_received
>Cmd=mycommand

我想使用python3在客户端实现相同的功能。我知道我可以连接到服务器,但是,我没有得到上面的完整响应。我尝试了以下方法:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('myhost', 50000))
s.sendall('mycommand')
data = s.recv(1024)
s.close()
print(repr(data))

但是我只回到第一行

>ServerOn=

有什么想法为什么我缺少部分答复?

1 个答案:

答案 0 :(得分:0)

套接字recv()将在数据到达时返回。无法保证该块的大小,除非小于传递的大小1024。在这里,当客户端看到行尾时,似乎客户端已发送了部分数据。

如果要检查/解析收到的内容,则必须将其读入缓冲区,直到获得所需的数据量为止。

短期内,请继续阅读直到插座关闭:

    connected = True
    while connected:
        data = s.recv(2048)
        if not data:
            connected = False
            print("### Client Disconnected")
        else:
            print("Received data: %u octets" % (len(data)))
            try:
                as_string = str(data,'utf-8')
                print(as_string)
            except:
                pass