在Python中,如何通过TCP以这种通信协议格式发送无符号字符?

2024-05-23 18:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我在做一个有专有通讯协议的项目。我需要发送数据在给定的格式和上,下,左和右坐标到特定的IP地址。通信是通过TCP进行的,我需要用python编写TCP客户端程序,以以下格式发送数据:

IP地址/握手地址:192.166.166.166

这是Data format。你知道吗

数据类型为无符号字符0-255(8位二进制),数据长度为6-64位。你知道吗

每帧的数据长度为10-64位。你知道吗

因此,如果我想将对象从1.0.0.1移动到(23,45,67,89),这是给定的指令:

将255 255 10 3 1 0 0 1 23 45 67 89发送到指定的IP地址。我想指定的IP地址是192.166.166.166。你可以参考数据格式来理解我要发送的数据。很简单。你知道吗

问题是,我应该如何在python中通过TCP发送这一系列无符号字符?你知道吗

我试过以下方法:

import socket
host = '192.166.166.166'
port = 80                   # 80 Because TCP

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))

data = '255 255 10 3 1 0 0 1 23 45 67 89'
s.sendall(data)
result = s.recv(1024)
s.close()
print('Received', repr(result))

显然这不管用。我没有指定无符号字符,我只是发送原始数据和空格。你知道吗

这是我从服务器得到的回报:

('Received', '\'HTTP/1.0 400 Bad Request\\r\\nServer: Mini-IoT-314\\r\\nDate: , 31  1969 23:59:59 GMT\\r\\nPragma: no-
cache\\r\\nCache-Control: no-cache\\r\\nContent-Type: 
text/html\\r\\nConnection: close\\r\\n\\r\\n<HTML><HEAD><TITLE>400 Bad 
Request</TITLE></HEAD>\\n<BODY BGCOLOR="#cc9999"><H4>400 Bad 
Request</H4>\\nCan\\\'t parse request.\\n</BODY></HTML>\\n\'')

现在,我不知道该做什么以及如何发送这些数据,以便服务器可以适当地处理这些数据。我真的很感谢你的帮助。你知道吗


Tags: 数据hostclosedataportrequest格式符号
2条回答

不是我的专长,只是一个想法: 您可能需要将数据作为结构发送。你知道吗

看看python的ctypes:https://docs.python.org/3/library/ctypes.html#structured-data-types

from ctypes import *

class payload(Structure):
    _fields_ = [("data_sign1", c_ubyte),
                  ...]

1)我在Python3.5中测试了您的代码,只是做了一些细微的修改,而不是发送字符串,而是通过将字符串转换成字节来发送字节

bytes(data,'utf-8')

2)不要使用端口80,可能是您的http服务器正在该端口上运行, 尝试使用其他端口。会有用的

相关问题 更多 >