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

时间:2018-05-24 09:02:05

标签: python networking tcp client

所以,我正在开发一个拥有专有通信协议的项目。我需要以给定的格式发送数据以及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\'')

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

2 个答案:

答案 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服务器正在该端口上运行,  尝试使用其他端口。它会起作用