Я пытаюсь сделать интеграцию через сокет HTTP. Я использую python для создания клиента сокетов и отправки данных на сервер сокетов, созданный в C.
Как видно на следующих изображениях, в документации по интеграции приведен пример на C, который показывает, как я должен отправлять данные на сервер:
Пример документации по интеграции:
1- определить типы записей / структур для заголовка сообщения и для каждого формата сообщения
2- Объявление / создание объекта сокета клиента
3- Открыть компонент сокета в неблокирующем режиме
4- объявите переменную типа структуры данных, относящуюся к функции API, которую вы хотите вызвать, - затем заполните ее правильными данными (включая заголовок). Скопируйте данные структуры в байтовый массив и отправьте их через сокет
Я пытался сделать это с помощью модуля ctypes из python:
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)
Когда я вызываю функцию сокета recv, она никогда не получает ничего, поэтому я использовал инструмент Windows для проверки отправленных данных, и, как вы можете видеть на следующем рисунке, кажется, что любые данные отправляются:
Сокет нюхает
Я пытался отправить даже простую строку "Hello! World", и результат всегда одинаков.
Розетка открыта. Я знаю это, потому что вижу, сколько соединений открыто с панели сервера.
Что я делаю не так?