0

安全な通信のために.netのSslStreamを使用するピアツーピアソフトウェアを開発しています。

BeginRead() と EndRead() を使用して、ストリームからデータを非同期的に読み取ります。(奇妙なコールバックメソッドはあまり気にしないでください..それは私が今作業しなければならないフレームワークからのものです)

while(Config.State < Config.State.Exit)
{

    association.SslStream.BeginRead(
                InputBuffer,
                InputBufferOffset,
                InputBuffer.Length - InputBufferOffset,
                iarPort.Post,
                null);

    yield return Arbiter.Receive(false, iarPort, iar =>
            {
                try
                {
                    bytesReceived = association.SslStream.EndRead(iar);
                }
                catch
                {
                    bytesReceived = 0;
                }
            });

// process data

}

クライアントは受信したデータを処理し、再度読み取りを開始します。リモート クライアントがまだ新しいデータを送信していない場合、受信クライアントは古いデータを再度読み取ります。そのため、データは読み取られた後も SslStream に残ります。

このデータを既に読んだことをクライアントに伝える方法はありますか?

4

1 に答える 1

1

読み取られた後、データはストリームに残りません。もしそうなら、それは深刻なバグです。その可能性は非常に低いので、まず自分のコードを見てみたいと思います。

おそらく何らかの方法でストリームを悪用しています。コードが値を尊重しないため、byte[] バッファーに古いデータが表示されている可能性がありbytesReceivedます。または、catch 句で抑制したエラーがありました。エラーに気付かなかっただけかもしれません。

私がバグを推測できなかった場合 (見つけるのに十分な情報がないため、推測する必要がありました)、おそらくデバッガーを使用して問題をステップスルーし、何が問題なのかを調べる必要があります。

于 2013-09-03T11:52:37.283 に答える