2013-10-28 1 views
0

두 개의 유닉스 시스템간에 임의의 파일을 전송하기 위해 UDP 연결을 사용해야하는 프로젝트를 진행 중입니다. 이 프로젝트의 주요 요점은 데이터를 바이트 배열로 인코딩하여 두 시스템간에 전송하는 것입니다. 필자의 원래 계획은 바이트 배열을 사용하여 목록을 구성한 다음 pickle로 직렬화하고 전송하는 것이 었습니다. 그러나 필자는 오늘 강사가 목록을 사용하고 피클을 직렬화하는 것이 문제의 수용 가능한 해결책이 아니라는 말을 들었습니다. 그의 말을 인용하려면 :python -리스트 또는 절임없이 UDP를 통해 바이트 배열 전송하기?

"유인물에 정의 된 프로토콜을 따르도록 정수, 문자열 및 파일 객체를 직접 인코딩하고 디코딩해야합니다." [이 프로토콜은 바이트 배열에서 세그먼트를 생성하고, 각 세그먼트는 파일 크기에 대해 4 바이트 배열을, 파일 이름에 대해서는 2 바이트 배열을, ID 플래그에 대해서는 1 바이트 배열을, 페이로드 바이트 배열은 길이에 따라 전송되는 내용에 따라 다릅니다.]

나는이 시점에서 그걸로 가지 않을 것입니다. 다른 컴퓨터로 보내야하는 바이트 배열이 있지만 처음 두 가지 아이디어는 허용되지 않습니다. 나는 바이트 배열과 UDP 연결 (둘 다 독립적으로 테스트)을 만들 수 있지만, 그것들을 보내면 나를 방해하고 있습니다. 내 파이썬 문제에 대한 좋은 해결책이 있습니까?

답변

0

파이썬의 바이트 배열은 str (간단한 문자열)로 가장 잘 표현됩니다. 당신의 작업은 아마 여러분이 가지고있는 프로토콜 스펙에 따라 그 바이트 배열을 생성하는 것이 될 것이다. 그 다음에 str인지 확인하고 소켓에 액세스하기위한 네트워크 기능을 통해 보내십시오.

''.join(chr(c) for c in integer_list) 

또는 어쩌면 당신은 (번호 목록을 통해 이동하지 않고) 바로 처음에 str을 구축 할 수 있습니다 :

는 다음 사용합니다 str에 정수 (바이트)의 목록을 변환합니다.

+0

이 시도하고 (테스트 프로그램) 다음과 같은 오류 있어요 : 형식 오류 : 정수 내가 (integer_list에서 C에 대한 INT (c) 참조)에 가입 게시 된 라인을 변경 시도 을 필요하고 다른 오류가 발생했습니다 : TypeError : 시퀀스 항목 0 : 예상되는 문자열, int 찾을 수 제대로 작동하려면 함수에 대해 무엇을 변경해야하는지 잘 모름. 나는 일을 계속 노력할 것이다. – user2828965

+0

'int'를 사용하면'int'의리스트로 끝나고'join'은'str'에만 합류하려고합니다; 'chr'은'str' 타입의 단일 문자 문자열을 생성합니다. 그래서 내가 게시 한 버전을 고수하십시오; 재판의 변화가 잘못된 방향이었습니다. 나는 당신의'integer_list'가 (단지) 정수를 포함하지 않는다고 에러 메시지에서 추측한다. 디버깅을 위해'print'를 사용하여 줄 수 있습니다. – Alfe

관련 문제