Theo tài liệu Python, phương thức socket recv() của Python trả về một mảng kiểu "byte".
Tuy nhiên, nếu tôi in ra mảng này, tôi cũng nhận được thứ gì đó trông không giống byte:
\xd9\x01\x01\xa4\xe9\xcbV6\x15\xed|>g5\xfa\xbd\xe9Q\x19@i\x18\xff\
Đối tượng byte Python có một số báo cáo lỗi nội bộ hay gì đó không? Những đối tượng byte này trông không giống byte thực tế được trả về là gì?
Một số ví dụ kỳ lạ hơn:
\x00w\xd4\x04;\x9c\x0b}>P]\xa4\xbd\xa5n:9x\xe3>9\xd2/~8\
\x01\x01\x1b ,Y\x00\x00\x00\x00\x00\xf4
\xa0A\n\xd7tB}\xed,\xc0\x00\
recv
không trả về byte thô. Khi chỉ in, các byte Python được mã hóa ASCII và nếu giá trị nằm trong phạm vi giá trị có thể in ASCII, nó sẽ được in dưới dạng ký tự ASCII được biểu thị bằng giá trị 8 bit đó. Nếu nó không in được ASCII, nó sẽ sử dụng \x
Thoát giá trị và in hex.
Lưu ý rằng nếu bạn đang sử dụng python 3.5, bạn có thể gọi .hex
và xem giá trị thập lục phân là gì. Điều này sẽ xác nhận rằng bạn đang nhận được giá trị mong đợi.
Vui lòng sử dụng Wireshark hoặc các công cụ tương tự để xác minh rằng các giá trị bạn gửi có đúng như mong đợi hay không, bạn sẽ chỉ thấy điều này trong bản in.
Tôi là một lập trình viên xuất sắc, rất giỏi!