我正在尝试使用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=
有什么想法为什么我缺少部分答复?
答案 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