나는 사진을 찍어 그 그림을 무선으로 무선으로 데스크탑 컴퓨터 수신기로 전송하는 장치를 개발 중입니다. 수신자 측에서는 C와 fwrite()를 사용하여 분할 된 데이터 패킷으로 전송 된 이미지 파일을 다시 작성합니다. 패킷을 수신하면 다음을 실행합니다.fwrite()를 통한 Jpeg 무선 전송 잃어버린 패킷을 처리해야합니다
fwrite(&data[3], size, 1, filename);
data [3]은 부호없는 8 비트 정수, 데이터 유형 u08입니다.
유선 파일 전송이 작동하는지 확인합니다. 송신기와 수신기를 직접 연결하면 문제가 없습니다.
그러나 무선 신호는 모든 패킷을 수신 할 수있을만큼 강하지 않습니다. 내 테스트에서는 전송 패킷이 손실되는 것이 일반적입니다. 하나의 패킷이 손실되면 이미지 파일이 손상됩니다. 수신율은 대략 85 %입니다.
모든 패킷에 번호가 매겨집니다. 수신 된 패킷 번호가 예상 된 패킷 번호보다 큰 경우, 수신기는 패킷이 드롭 된 것을 안다.
내 솔루션은 누락 패킷을 기본 패킷으로 교체하고 예상 패킷 수 카운터를 증가시키는 것입니다. 기본적으로, 필자는 손실 된 픽셀을 검은 픽셀로 채울 계획이며 수신 된 패킷을 사용하여 가능한 가장 완벽한 그림을 만듭니다. 나는 이것을 어떻게하는지 모른다. 수신 된 패킷 번호와 예상 패킷 번호가 일치하지 않으면 단순히 데이터 [3]을 0으로 설정하려고 시도했지만 작동하지 않았습니다.
다른 제안 된 솔루션을 환영합니다.
달리해야 할 특별한 이유가 없으면 (분명히) UDP 대신 TCP를 통해 파일을 보냅니다. TCP가 자동으로 재전송을 처리합니다. –
이것은 귀하의 질문에 대한 답변입니다. 시간에 민감한 전송 및 손실 된 패킷이 최종 결과에 막대한 영향을 미치지 않는 곳에서는 UDP를 예약해야합니다. 예를 들어 오디오 스트림을 상상해보십시오. –
프로토콜을 사용하지 않고 TCP 또는 UDP도 사용하지 않습니다. 전송 스타일이 UDP에 더 가깝다는 것은 사실입니다. 내 프로젝트와 전파의 한계로 인해 패킷 당 128 비트 만 전송할 수 있는데 이는 TCP 헤더 자체의 크기라고 생각합니다. 실제 데이터를 저장할 공간이 없습니다. – user1409199