1

ファイル転送アプリケーション用のサーバーを開発しています。ファイルは Android フォンからサーバーに送信されます。

ファイルサイズが小さいとスムーズに動作します。ただし、ファイル サイズが大きい場合 (>2MB)、サーバーはパケット全体を受信しません。

int recv(
  _In_   SOCKET s,
  _Out_  char *buf,
  _In_   int len,
  _In_   int flags
);

len関数内のの値は、最初recvは に設定されていましたが、20000に変更すると、機能8000し始めました。

驚くべきことに、これはRelease mode in Visual Studio.

Wireshark を使用して、モバイル デバイスからログを取得しました。サーバーがデバッグ モードで実行されている場合、ハンドセットはすべてのデータを送信しますが、サーバーがリリース モードで実行されている場合、ハンドセットはデータ全体を送信しません。(これは len の値が に設定された場合です20000)。

ただし、PC ベースのクライアント (クライアントがサーバーと同じマシン上にある) を介して大きなファイルを送信すると、の値をlen20000 に保つことができます。

誰もそのような問題に直面しましたか?そのような行動の理由は何ですか?

注: Visual Studio を使用して Windows で開発しています。

4

2 に答える 2