2013-02-17 2 views
1

샘플 Python 소켓 모듈을 기반으로 한 코드로 UDP를 통해 바이트 목록을 보내려고합니다. 클라이언트/서버 전송은 문자열로 잘 작동합니다. 그러나 bytearray를 사용하는 것이 길로 보였으 나 수신 된 길이는 내용에 달려있는 것 같습니다. 1,2,3,4,5,6을 보내면 괜찮습니다.하지만 6에서 10 또는 11을 변경하면 서버에서 5 바이트 만 수신합니다. 우분투에서 파이썬 2.7.3. 나는 무엇을 이해하지 못합니까?UDP를 통한 바이트 목록 전송

클라이언트 :

data = bytearray([1,2,3,4,5,6]) 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
sock.sendto(data, (HOST, PORT)) 

서버 :

class MyUDPHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
     data = self.request[0].strip() 
     socket = self.request[1] 
     print len(data) 
     idata = map(ord, data) 
     print len(idata) 
     print idata[0],idata[1],idata[2],idata[3] 

답변

4

(10) 및 (11)가 각각 새 라인과 탭에 대한 ASCII 코드입니다. strip() 호출은 데이터에서이를 제거합니다.

+0

하! 잘 했어. 거기에 원래 예제 코드에서 있었지만, 나는주의를 기울이지 않았다. –

1

strip()을 사용하지 마십시오. 이것은 문자열에서 공백과 개행을 제거하기위한 것입니다. 귀하의 경우, 그것은 10이 공백이었고 그것을 제거했다고 생각했습니다.

>>> len(bytearray([1,2,3,4,5,10])) 
6 
>>> len(bytearray([1,2,3,4,5,10]).strip()) 
5