Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- linearlaout
- JSON
- 주석 숨김
- cloudstation
- clp 325wk
- 장치 데이터 오류
- 이클립스 주석
- SetWindowTextW
- git
- synology
- quickconnect
- java.net.bindexception
- cloud station
- truncated
- windows terminal
- formatting failed
- urllib3
- github
- SSL 인증서가 변경되었습니다
- 라즈베리파이
- 시놀로지 색인
- MFC
- Eclipse
- c++
- audio station버그
- IntelliJ
- ds cloud
- setonkeylistener
- Wraith Spire
- Linux
Archives
- Today
- Total
딸기스무디
라즈베리파이에서 소켓통신시 주의할점 본문
라즈베리파이에서 영상을 송수신하는 프로그램을 만들다가 생긴 문제점
수신측은 반복문을 사용하여 모든 데이터를 수신할때 까지 recv를 반복하도록 구현했고, 송신측은 파이썬에서 제공하는 sendall함수로 통신할때, 데이터가 잘리는 현상(truncated)발생
먼저 wireshark, tcpdump로 recv/send packet를 확인하여 TCP프로토콜은 역할을 다했음을 확인하였습니다.
윈도우에서 ping test 결과. loss 50%, latency 42ms로 네트워크 상태가 별로 좋지 않습니다
라즈베리파이에서 ping test결과. loss 7%로 성능이 좋지 않습니다.
파이썬에서 동작했을때 결과. 크기가 꽤 큰 파일임에도 1096360에서 수신이 종료되었습니다.
전송중 손실되거나 늦게 오는 패킷때문에 순간적으로 소캣버퍼가 비면 조건식에 따라 반복문을 종료하게되어 발생했던 문제입니다.
따라서, 파일 전송전에 전체 크기를 미리 알려주는 제어패킷을 추가로 전송하도록 해서 해결하였습니다
수신측에서 전체 크기를 알고있으므로 모든 파일을 수신할때까지 반복문을 종료하지않아 모두 수신할 수 있었습니다.
Comments