我从一个网络服务器接收到一个响应,并试图解包该响应并将其显示在屏幕上,但遇到了错误
AttributeError: 'tuple' object has no attribute 'tag'
我想这可能与我如何调用上面的变量有关。请不要忘了我对python和socket编程非常陌生。
无论如何,响应格式有3个部分
TYPE OFFSET
tag uint32 0
code uint32 4
message string 8
应显示:标记:1(或任意数字)
代码:200(成功)
留言:“嘿”
import socket
import struct
import textwrap
TCP_IP = '127.0.0.1'
TCP_PORT = 4200
TAB_1 = '\t - '
TAB_2 = '\t\t - '
TAB_3 = '\t\t\t - '
TAB_4 = '\t\t\t\t - '
DATA_TAB_1 = '\t '
DATA_TAB_2 = '\t\t '
DATA_TAB_3 = '\t\t\t '
DATA_TAB_4 = '\t\t\t\t '
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 4200))
packet = struct.pack('ii', 1,4)
s.send(packet)
while True:
response, addr = s.recvfrom(65535)
print(response.__sizeof__())
bny = binary_response(response)
print(TAB_1 + 'Binary Response Segment:')
print(TAB_2 + 'Tag: {}, Code: {}' + bny.tag, bny.code)
print(TAB_2 + 'Message: ' + bny.response)
def binary_response(response):
tag, code = struct.unpack('i i', response[:12])
return tag, code, response[12:]
main()