我正在尝试通过HTTP套接字进行集成。我正在使用python创建套接字客户端并将数据发送到用C创建的套接字服务器。
如以下图像所示,集成文档以C语言给出了一个示例,该示例显示了我必须如何将数据发送到服务器:
集成文档示例:
1- define record / structure types for the message header and for each message format
2- Declare / Create a client socket object
3- Open the socket component in non blocking mode
我尝试使用python中的ctypes模块来做到这一点:
class SPMSifHdr(ctypes.Structure):
_fields_ = [
('ui32Synch1', ctypes.c_uint32),
('ui32Synch2', ctypes.c_uint32),
('ui16Version', ctypes.c_uint16),
('ui32Cmd', ctypes.c_uint32),
('ui32BodySize', ctypes.c_uint32)
]
class SPMSifRegisterMsg(ctypes.Structure):
_fields_ = [
('hdr1', SPMSifHdr),
('szLisence', ctypes.c_char*20),
('szApplName', ctypes.c_char*20),
('nRet', ctypes.c_int)
]
body_len = ctypes.sizeof(SPMSifRegisterMsg)
header = SPMSifHdr(ui32Synch1=0x55555555, ui32Synch2=0xaaaaaaaa, ui16Version=1, ui32Cmd=1, ui32BodySize=body_len)
body = SPMSifRegisterMsg(hdr1=header, szLisence='12345', szApplName='MyPmsTest', nRet=1)
socket_connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# config is a dict with the socket server connection params
socket_connection.connect((config.get('ip'), int(config.get('port'))))
socket_connection.sendall(bytearray(body))
socket_connection.recv(1024)
当我调用socket recv函数时,它永远不会收到任何信息,因此我使用Windows工具检查了我发送的数据,并且如您在下一张图片中所看到的,似乎已经发送了任何数据: Socket sniff
我甚至尝试发送一个简单的“ Hello!world”字符串,结果始终相同。
套接字连接已打开。之所以知道,是因为我可以从服务器面板中看到打开了多少个连接。
我在做什么错了?
答案 0 :(得分:0)
错误是,如果服务器返回响应,则SocketSniff程序仅显示发送的数据。在这种情况下,服务器永远不会返回任何内容,因为缺少某些字节。
我发现它创建了自己的套接字回显服务器,并检查了我发送的数据是否不完整。
谜团解决了。 :D