[英]Receiving binary data through network sockets in python 3
在我的網絡課程中,我要做的一個實驗是使一個客戶端按大端序接收5個熟悉的32位整數並使它們變活。 我決定使用python,一切正常,但是我收到了奇怪的十六進制代碼。
\\ X00 \\ X00 \\ x00o \\ X00 \\ X00 \\ X00 \\ XE4 \\ X00 \\ X00 \\ X01 \\ XB3 \\ X00 \\ X00 \\ X01 \\ XDB \\ X00 \\ X00 \\ X01 \\ XEC
我可以輕松轉換大多數,但x00o確實讓我感到困惑,228 435 475 492,在那之后我相信這4個。 您能幫我取消服務器消息嗎?
import socket
import sys
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print('Failed to create socket')
sys.exit()
print('Socket Created')
host = 'localhost'
port = 5071
try:
remote_ip = socket.gethostbyname(host)
except socket.gaierror:
#could not resolve
print('Hostname could not be resolved. Exiting')
sys.exit()
s.connect((remote_ip , port))
print('Socket Connected to ' + host + ' on ip ' + remote_ip)
reply = s.recv(4096)
print(reply)
code.py :
import sys
import struct
def convert_data_to_ints(data, big_endian=True):
int_count = len(data) // 4 # Assuming uint is 4 bytes long !!!
fmt = ">" if big_endian else "<"
fmt += "I" * int_count
return struct.unpack(fmt, data[:int_count * 4])
def main():
print("Python {} on {}\n".format(sys.version, sys.platform))
data = b"\x00\x00\x00o\x00\x00\x00\xe4\x00\x00\x01\xb3\x00\x00\x01\xdb\x00\x00\x01\xec"
ints_be = convert_data_to_ints(data)
print("Big endian: {}".format(ints_be))
ints_le = convert_data_to_ints(data, big_endian=False)
print("Little endian: {}".format(ints_le))
if __name__ == "__main__":
main()
注意事項 :
convert_data_to_ints
:
"I"
格式)。 檢查網頁上面在第(1 日 )在“ 格式字符串 ”節 "IIIII"
進行硬編碼, "IIIII"
想使其更加通用)。 如果字符串長度不是4的整數倍( int的整數 ),則末尾不完整的int (最多3個字節)將被丟棄(當然,更好的方式是填充字符串並轉換“ incomplete數據,但這不在問題范圍內) main
:
socket.recv
以這種形式返回它)。 如果(我錯了)並且它以字符串形式返回數據,則只需使用[Python]:str。 編碼 ( encoding =“ utf-8”,errors =“ strict” ) 輸出 :
E:\\Work\\Dev\\StackOverflow\\q048508018>"c:\\install\\Python\\3.4.3\\x86\\python.exe" code.py Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Big endian: (111, 228, 435, 475, 492) Little endian: (1862270976, 3825205248, 3003187200, 3674275840, 3959488512)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.