簡體   English   中英

如何在Python中以這種通信協議格式通過TCP發送無符號字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM