딸기스무디

라즈베리파이에서 소켓통신시 주의할점 본문

카테고리 없음

라즈베리파이에서 소켓통신시 주의할점

strawberry-smoothie 2019. 11. 12. 22:45

라즈베리파이에서 영상을 송수신하는 프로그램을 만들다가 생긴 문제점

 

수신측은 반복문을 사용하여 모든 데이터를 수신할때 까지 recv를 반복하도록 구현했고, 송신측은 파이썬에서 제공하는 sendall함수로 통신할때, 데이터가 잘리는 현상(truncated)발생

 

먼저 wireshark, tcpdump로 recv/send packet를 확인하여 TCP프로토콜은 역할을 다했음을 확인하였습니다.

 

윈도우에서 ping test 결과. loss 50%, latency 42ms로 네트워크 상태가 별로 좋지 않습니다

 

라즈베리파이에서 ping test결과. loss 7%로 성능이 좋지 않습니다.

 

파이썬에서 동작했을때 결과. 크기가 꽤 큰 파일임에도 1096360에서 수신이 종료되었습니다.

 

 

전송중 손실되거나 늦게 오는 패킷때문에 순간적으로 소캣버퍼가 비면 조건식에 따라 반복문을 종료하게되어 발생했던 문제입니다.

 

따라서, 파일 전송전에 전체 크기를 미리 알려주는 제어패킷을 추가로 전송하도록 해서 해결하였습니다

수신측에서 전체 크기를 알고있으므로 모든 파일을 수신할때까지 반복문을 종료하지않아 모두 수신할 수 있었습니다.

 

 

Comments