所以,我正在开发一个拥有专有通信协议的项目。我需要以给定的格式发送数据以及Up,Down,Left和amp;正确协调特定的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))
显然这不起作用。我没有指定unsigned char,我只是发送原始数据和空格。
这是我从服务器获得的回报:
('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\'')
现在,我不知道该怎么做以及如何发送这些数据,以便服务器可以适当地处理这些数据。我真的很感激这里的帮助。
答案 0 :(得分:0)
不是我的专业领域,只是一个想法: 您可能需要将数据作为结构发送。
看看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 :(得分:0)
1)我在python 3.5中测试了你的代码,只是略微修改而不是发送字符串,我通过将字符串转换成字节来发送字节
bytes(data,'utf-8')
2)不要使用端口80,可能是你的http服务器正在该端口上运行, 尝试使用其他端口。它会起作用