본문 바로가기
파이썬

파이썬 Python으로 소켓을 통해 바이너리 데이터 보내기

by º기록 2021. 1. 9.
반응형


소켓 (HTTP)을 통해 문자열을 보내는 작은 프로그램 만 작성했습니다. 예를 들어 SPDY 제어 프레임 헤더를 구현하려면 어떻게해야합니까? 예를 들어 제어 프레임 헤더의 모든 다른 섹션의 크기를 제어하기 위해 bitstring 라이브러리와 numpy를 사용하려고 시도했지만 실제로 작동하는 것은 없습니다. 현재 파이썬 용 SPDY 라이브러리는 cython 및 C 데이터 유형을 사용하며 매우 예측할 수없는 것으로 나타났습니다. 순수한 파이썬으로 간단한 요청을 작성하는 방법 또는 프로토콜 정의와 정확히 같은 것을 작성하여 소켓을 통해 보내는 방법에 대해 궁금합니다.

 

해결 방법

 

일반적으로 bytearray 클래스가 당신의 친구가 될 것입니다 (당신의 질문을 올바르게 이해한다면). 소켓을 통해 보낼 수 있습니다.

my_bytes = bytearray()
my_bytes.append(123)
my_bytes.append(125)

// my_bytes is b'{}' now

s.send(my_bytes)

프로토콜 사양을 따르고 바이트 단위로 생성합니다. 이것은 데이터를받을 때도 작동합니다.

data = s.recv(2048)
my_bytes = bytearray(data)

SPDY 프로토콜에 대해 잘 모르지만 예를 들어 제어 비트는 메시지의 첫 번째 비트 (바이트가 아님)입니다. 바이너리를 통해 my_bytes 에서 검색 할 수 있습니다. 예를 들면 다음과 같습니다.

control_frame = my_bytes[0] & 128

이는 128 이 바이너리로 10000000 이기 때문에 바이너리 AND가 첫 번째 비트 만 제공하기 때문입니다 (각 바이트에는 8 비트가 있으므로 7 개의 0이 있음을 기억하십시오).

이것이 수동으로 수행되는 방법입니다. 물론 적절한 프로토콜 핸들러를 작성하는 데 많은 시간이 걸리기 때문에 라이브러리를 사용하는 것이 좋습니다. 매우 어렵고 효율적이지 않을 수 있습니다 (물론 필요에 따라 다름).

 

참조 페이지 https://stackoverflow.com/questions/18310152

 

 

반응형

댓글