我有以下读取回调函数,我打算在其中读取 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;
}