2009-07-27 24 views
1

私のコードで奇妙な問題が発生しましたが、送信側以外はすべてうまく動作します。パケットを送信しようとすると、実際には多くの空のパケットが送信され、その理由がわかりません。デバッガでチェックして、SendPacket関数が1回だけ呼び出されています。みんなありがとう!C#非同期ソケットの問題

+0

「空パケット」とはどういう意味ですか?どのようにサーバー側で読んでいるのですか? TCPはストリームプロトコルであり、パケットで「考える」ことはありません。受信者は、単一の送信からすべてのデータを取得するために受信への複数の呼び出しを必要とする場合があります。同様に、複数の送信はNagleのため単一の受信に終わる可能性があります。空の配列(つまりすべてゼロ)を送信しています。あなたのサーバーがそれを奇妙に解釈したり、小さなバッファでReceiveを呼び出すと、 "複数のパケット"のように見えます。 –

+0

うわー。すべてのこれらの時間後..問題は、次の行にありました。 Client.BeginSend(buff、0、buff.length、SocketFlags.None、 新しいAsyncCallback(SendData)、クライアント); サーバー側のアプリケーションに8192バイトを送信していました。私はそんなにばかげています。どうもありがとう! –

+0

私はあなたがおそらくそれを見逃しているのを見ることができますが、以前の私のコメントは、2番目の**時間です。 "とにかく。" –

答えて

0

私が見る何を:あなたはOnPacketRecv経由SendPacketSocket.BeginSend()に配列(loginOutBuffer)に合格していますが、OnPacketRecvで、すぐ後に、それをクリアします。

Socket.BeginSend()これを渡すと配列のコピーが作成されないため、現在消去されている配列のデータが送信され、結果としてゼロが出力されます。

+0

それは本当ですが、それは主要な問題自体に関連していません。問題は、私がサーバーアプリケーションで多くの空のパケットを受信するということです。まだ助けてくれてありがとう! –

+0

あなたの質問に私のコメントを見てください。 –