次の読み取りコールバック関数があります。この関数では、TCP データ送信の内容全体を読み取り、それらの内容に対して作業を実行します。8192 バイト未満の送信を読み取ると、うまく機能します。ただし、8192 バイトを超える転送が検出されると、最初の 8192 バイトで作業を実行し、その後の 8192 バイトに対して関数を再度実行します。networkStream
コードのステップ実行中にオブジェクトを調べると、SystemNotSupported
例外が表示されます。「このストリームはシーク操作をサポートしていません。」
例外処理が投稿されたコードに吸い込まれていることに気付きました。これは現時点ではサンドボックス テストであり、運用コードではありません。
データに対して作業が実行される前に、コールバック関数で送信全体をキャプチャしたいと考えています。これどうやってするの?
private void ReadCallback(IAsyncResult asyncResult)
{
Client client = asyncResult.AsyncState as Client;
if (client != null)
{
NetworkStream networkStream = client.NetworkStream;
int read;
try
{
read = networkStream.EndRead(asyncResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
if (read == 0)
{
return;
}
try
{
byte[] data = new byte[read];
Buffer.BlockCopy(client.Buffer, 0, data, 0, read);
string message = win1252.GetString(data).TrimEnd('\u001a', '\r', '\n'); //decode the transmission
//Do work on received message here...
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}