我收到一个来自网络服务器的响应,试图解压响应并在屏幕上显示出来,但是遇到了错误
AttributeError: 'tuple' object has no attribute 'tag'
我想这可能和我如何调用上面的变量有关。请别忘了我是python和socket编程的新手
无论如何,响应格式有三个部分
TYPE OFFSET
tag uint32 0
code uint32 4
message string 8
应显示:Tag:1(或anynumber) 代码: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)
# Unpack binary_response
def binary_response(response):
tag, code = struct.unpack('i i', response[:12])
return tag, code, response[12:]
main()
正如错误消息所说,
binary_response()
返回一个元组,但是您试图访问返回的标记值,就好像它是一个属性一样。不是的因为tag是返回元组中的第一个元素,所以使用
bny[0]
而不是bny.tag
相关问题 更多 >
编程相关推荐