【发布时间】:2014-11-05 22:17:02
【问题描述】:
我目前正在实现以下代码,以将数据包发送到 Parallels PVA XML API。我正在尝试向服务器发送 两个 XML 数据包。第一个是指定用户凭据的登录数据包,第二个是包含有关 API 请求的信息的数据包。这些数据包应该由一个空字节\0 分隔。通常,服务器会发回多个数据包,第一个数据包说明登录成功,第二个数据包包含有关 API 请求的信息。
我遇到的问题是似乎没有发送第二个数据包。我收到的唯一响应是第一个说明登录成功的数据包,但我没有收到包含有关 API 请求信息的数据包。我认为这可能是因为我正在发送一个空字节,所以我尝试在 base64 中编码所有内容,但我最终得到了相同的结果。
那么在我看来,要么连接被关闭,服务器没有足够的时间发送它的第二个数据包,要么因为空字节而完全忽略了数据包。
任何帮助或 cmets 将不胜感激。提前谢谢!
import socket
import base64
def client(string):
HOST, PORT = '[IP_ADDRESS]', 4433
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((HOST, PORT))
sock.send(base64.b64encode(string))
reply = sock.recv(131072)
sock.close()
return reply
packet = "<packet></packet>\0<packet></packet>"
print client(packet)
请不要故意在数据包中没有信息,因为它包含敏感信息,并且IP地址被故意替换为“[IP_ADDRESS]”
【问题讨论】:
-
服务器协议是什么?
-
@Anzel TCP - 客户端/服务器协议
-
空字节跳过整个 131072 字节发送,因此第二部分从未到达。提供答案
标签: python python-sockets