質問: ### 前提・実現したいこと ご閲覧ありがとうございますm(*)m AndroidとRaspberryPi間の画像転送のプログラムについてなのですが,現在,RaspberryPiをサーバーにしてAndroidからsocket通信を使い,転送しようと試みています. しかし,Wifiの通信環境が悪いせいか,画像を開こうとするとデータが破損しているという表示になってしまいます. そこで質問なのですが,Wifiなどの接続環境が悪くてもデータがしっかり届くようにするようなプログラムなどがありましたら教えていただけないでしょうか? ご教授お願いいたしますm(*)m ### 発生している問題・エラーメッセージ ``` エラーメッセージ ``` ### 該当のソースコード 画像を受信するコードはこのようになっています. ``` while(1){ size=recv(sock_cl,buf,sizeof(buf),0); if(size<=0){ if((result=select(sock_cl+1,&sock_wait,NULL,NULL,&tv))==0){ fclose(fp_w); close(sock_cl); break; }else if(result<0){ goto rstart; }else{ size=recv(sock_cl,buf,sizeof(char),0); } }; fwrite(buf,sizeof(char),size,fp_w); // printf("%d",size); } ``` ### 試したこと 現在はSelectという関数を使って,0byteが送られてきても何秒か待ってから終了するようにしています. ### 補足情報(言語/FW/ツール等のバージョンなど)
回答: 送信元、送信先のファイルをバイナリレベルで比較してみてください。 バイナリーエディタというソフトがあるのでそういったものを使うといいでしょう。 もし順番が入れ替わっているようだったらリトルエンディアン/ビッグエンディアンの問題かと。 TCP/IPで接続しているのであれば、基本的にパケットレベルではデータは保証されているはずなのでデータが化けることはないはず。 とはいっても途中で切れることはあるので、送信に先立って何バイトの画像を送ります。というような情報は必要かと思います。ハッシュもあればより良いと思います。