サーバークライアントモデルを使用してC#でアプリケーションを開発しています。このモデルでは、サーバーがビット配列を含むバイト配列をクライアントに送信し、クライアントがそれを画面にロードし、サーバーに「OK」を送信し、サーバーが送信します。別の画像など。
画像バッファの長さは異なります。通常は60kbから90kbの間ですが、問題ではないことを確認しました。localhostを使用して、クライアントとサーバーを同じコンピューターに配置すると、すべてが正常に機能します。サーバーはbeginSendを実行し、クライアントはendReceiveを実行し、バッファー全体が送信されます。
しかし、私は現在ワイヤレスネットワークでこれをテストしており、何が起こるかは次のとおりです。
- サーバーは画像を送信します。
- クライアントでコールバック関数data_receivedが呼び出されますが、読み取るのは1460バイトだけです(MTU-なぜ?UDPだけにすべきではないのですか?)
- クライアントでコールバック関数data_receivedが再度呼び出され、残りのバッファー(1000バイトまたは100キロバイト)が使用されます...
これは常にこのように、1460バイトの最初のパケットが受信され、次に2番目のパケットに残りが含まれます。
受信した両方のバイト配列を結合することでこれを回避できますが、これは正しくないようです。なぜこれが起こっているのかさえわかりません。ネットワークに制限はありますか?では、なぜC#はデータ全体が送信されるのを待たないのでしょうか。つまり、TCPです。心配する必要はありませんよね?
とにかく、どんな助けも素晴らしいでしょう!
乾杯