ファイル転送アプリケーション用のサーバーを開発しています。ファイルは 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 ベースのクライアント (クライアントがサーバーと同じマシン上にある) を介して大きなファイルを送信すると、の値をlen
20000 に保つことができます。
誰もそのような問題に直面しましたか?そのような行動の理由は何ですか?
注: Visual Studio を使用して Windows で開発しています。