[英]How to send unsigned characters over TCP in this communication protocol format in Python?
因此,我正在使用專有通信協議進行項目。 我需要以給定的格式發送數據,並且將上,下,左和右坐標發送到特定的IP地址。 通信是通過TCP進行的,我需要使用python對TCP客戶端進行編程,以便以以下格式發送數據:
IP地址/握手地址:192.166.166.166
這是數據格式 。
數據類型為無符號char 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\'')
現在,我不確定該怎么做以及如何發送該數據,以便服務器可以適當地處理這些數據。 我非常感謝您的幫助。
並不是我真正的專業領域,只是一個想法:您可能需要將數據作為結構發送。
看看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)我在python 3.5中測試了您的代碼,進行了一些修改而不是發送字符串,我通過將字符串轉換為字節來發送字節
bytes(data,'utf-8')
2)不要使用端口80,因為您的http服務器正在該端口上運行,請嘗試使用其他端口。 它會工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.