python-2.7 - python socket客户端不发送任何东西
问题描述
我正在尝试通过 HTTP 套接字进行集成。我正在使用 python 创建套接字客户端并将数据发送到用 C 创建的套接字服务器。
正如您在下图中看到的那样,集成文档提供了一个 C 语言示例,显示了我必须如何将数据发送到服务器:
集成文档示例:
4-声明一个与您希望调用的 API 函数相关的数据结构类型的变量——然后用正确的数据(包括标题)填充它。将结构体数据复制到字节数组中,通过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”字符串,结果总是一样的。
套接字连接已打开。我知道,因为我可以看到从服务器面板打开了多少连接。
我究竟做错了什么?
解决方案
错误是 SocketSniff 程序仅在服务器返回响应时才显示发送的数据。在这种情况下,服务器永远不会返回任何内容,因为缺少一些字节。
我发现它创建了我自己的套接字回显服务器并检查我发送的数据是否不完整。
谜团已揭开。:D
推荐阅读
- python - 无法在 Chome 版本 81 上使用 selenium python 无头驱动
- javascript - 如何在问题中添加照片?
- javascript - 是否“显示:无;” 提高还是降低性能?
- mysql - SQL 结合两个计数结果
- java - JAVA GUI:文本字段只接受数字输入
- ceph - 如何在 60 天内无法访问 ceph rgw 中查找文件?
- c# - 按 col1 排序,但如果在实体框架中按 col2 排序为 null
- java - 当分布宽度不能为整数时,Hbox中的按钮宽度不均匀,hgrow
- java - 检索 api 结果时陷入无限循环
- regex - 使用正则表达式从字符串文件中提取路径(Linux)