7

イベント駆動型の Windows、C#、TCP クライアントが必要です。

読み取りバッファーに少なくとも 35 バイトがある場合、それらの 35 バイトを読み取り、その「パケット」から長さの値を取得し、その 2 番目の長さのデータに対してブロッキング読み取りを行うハンドラーを呼び出す必要があります。

4

3 に答える 3

1

BCL で使用できるイベントベースのソケット クラスはないと思いますが、単純な よりも少し高いレベルのものを探している場合はSocket、おそらく を調べる必要がありますTcpClientStreamReader基になるストリームのバッファリングを処理し、などを介してアクセスできるようにします。

TcpClient client;
// ... construct, connect, etc ...
new StreamReader(client.GetStream());

回線ベースのプロトコルを使用している場合は、 を使用するだけで済みますがStreamReader.ReadLine()StreamReader.Read()目的にも簡単に適合するはずです。

于 2012-08-01T02:26:05.937 に答える
1

正しい方向に進むには、 と を確認してSocket.BeginReceive()くださいSocket.BeginSend()

また、上記の関数の使用方法に関する Microsoft の便利な一連の例を次に示しますそれは私がそれらを始めるのを助けました。

残念ながら、読み取りバッファーに少なくとも 35 バイトがないと、コールバックを呼び出すオプションが表示されません。何かが受信されるたびに呼び出されます-たとえそれがゼロバイトであっても。ただし、取引相手がメッセージをバイトごとに送信しない可能性があります。

于 2012-08-01T02:15:44.420 に答える