• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Winsockを用いてデータを交互に送信しあいたい)

Winsockを用いたデータの交互送信の問題

このQ&Aのポイント
  • Winsockを用いてデータの交互送信を行いたいが、送信がうまくいかない
  • ファイルの先頭から4MBの送信は成功しているが、それ以降がうまく進まない
  • 接続を切断して再接続しても結果は変わらない

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>Total += recv( Sock, (char *)&Buff[Total], SendSize-Total, 0 ); >if( Total == -1 ) >{ > delete []Buff; > return -1; >} 最初のパケット受信で失敗しない限り、エラー処理に入りません。 # エラーをず~~~~っと続ければそのうちはいりますけどね。 # 最初に100バイトrecv()出来た場合は、次にrecv()でエラーが101回になった時点でエラー処理に入れるようになります。 >int Error = send( Sock, (char *)buff, 4, 0 ); >if( Error == -1) >{ > return -1; >} そのまま戻るんじゃなくて…せめてエラーの原因くらいは調べた方がいいのではないですか? # recv()でもですが。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740149%28v=vs.85%29.aspx で…SOCKET_ERRORが返されたらWSAGetLastError()でエラーの詳細が得られる。 となっています。 # -1ってマジックナンバーではなく、ちゃんとSOCKET_ERRORと記述するべきです。 >while( TotalSend < R ) >while( TotalSend < SendSize ) のループに入る時、それぞれの変数は適切に初期化されていますか? # 例によって省略されているんでしょうけど。 双方でパケットキャプチャしてみて、想定通りにやりとりが行われていますか?

Null0lluN
質問者

お礼

>while( TotalSend < R ) >while( TotalSend < SendSize ) のループに入る時、それぞれの変数は適切に初期化されていますか? 1回目のループでは初期化してますが、2回目以降が初期化されてないですね int TotalSend = 0; while(1) { と外に置いちゃったのが問題でしたね。 下らない質問にお手数をかけて申し訳ありませんでした。 おかげさまで解決です。 ありがとうございました

関連するQ&A