python套接字客户端不发送任何东西

时间:2019-03-09 22:48:24

标签: python-2.7 sockets

我正在尝试通过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

4- declare a variable of the data structure type relevant to the API function you wish to call – then fill it with the correct data (including header). Copy the structure data to a byte array and send it through the socket

我尝试使用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”字符串,结果始终相同。

套接字连接已打开。之所以知道,是因为我可以从服务器面板中看到打开了多少个连接。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

错误是,如果服务器返回响应,则SocketSniff程序仅显示发送的数据。在这种情况下,服务器永远不会返回任何内容,因为缺少某些字节。

我发现它创建了自己的套接字回显服务器,并检查了我发送的数据是否不完整。

谜团解决了。 :D