0

全て、

私は C# とソケット プログラミングの初心者なので、アドバイスが必要です。私はこのサイトや類似のサイトを見てきましたが、私の問題の解決策が実際には見つかりませんでした.

クライアント アプリケーションとサーバー アプリケーションを開発しており、この 2 つは非同期ソケットを介して通信しています。クライアントは、BinaryFormatter を使用してオブジェクトを MemoryStream にシリアル化することにより、一度に 1 つずつサーバーにオブジェクトを送信します。結果のバイト配列はソケット経由で送信され、サーバーによって逆シリアル化されます。

これは、クライアントが新しいオブジェクトを送信する前に、サーバーがオブジェクトを受信して​​処理する時間がある場合にうまく機能します。ただし、サーバーが処理できる速度よりも速くクライアントがオブジェクトを送信すると、オブジェクトはサーバー側でキューに入れられます。次の EndReceive() 呼び出しは、キューに入れられたすべてのオブジェクトをソケットから読み取りますが、シリアライザーは最初のオブジェクトのみを逆シリアル化し、他のオブジェクトは失われます。

オブジェクトは可変サイズなので、MemoryStream の Position プロパティを使用できないと思います。オブジェクトの開始位置をバイト配列で検出する方法はありますか?

また、EndReceive() が 1 回の読み取りで送信されたすべてを受信しない可能性があることを他の投稿で読みました。他の読み取りが必要になる場合があります。それで、それは私が対処しなければならない別のものだと思いますか?

ポインタはありますか?どんな助けでも大歓迎です。:-)

4

1 に答える 1

0

ソケットがキューに入れられないように、利用可能な限り読み取り、処理のために「キューに入れる」ことができます。データを受信するサーバーは、単にデータを読み取ってメッセージ キューに送信し、非同期で処理することができます。

ただし、サーバーが書き込みに追いつくのに十分な速度で処理できないことは懸念事項です。それを最適化することを検討したいかもしれません。

于 2012-05-15T21:01:05.280 に答える