C# 异步tcpclient rsponse始终包含来自上一个响应的数据

C# 异步tcpclient rsponse始终包含来自上一个响应的数据,c#,asynchronous,tcpclient,C#,Asynchronous,Tcpclient,我想在我的帖子的开头解释一下,我有点不知所措。我是一名C#程序员新手,想了解更多关于异步TCP的知识。我有一个项目,我正在工作,遇到了一个障碍 下面的代码是我从互联网上的各种来源收集到的。我找不到包含我正在使用的示例的博客。我还使用了从MSDN文章中获得的一些想法 当我在创建strData后中断时,字符串数据的值总是包含上一次读取的数据(字符有点歪斜) 示例输出 Enter Password: 使用我的写方法,我输入密码,我从读取返回这个 Lnther Password: ogin OK L

我想在我的帖子的开头解释一下,我有点不知所措。我是一名C#程序员新手,想了解更多关于异步TCP的知识。我有一个项目,我正在工作,遇到了一个障碍

下面的代码是我从互联网上的各种来源收集到的。我找不到包含我正在使用的示例的博客。我还使用了从MSDN文章中获得的一些想法

当我在创建strData后中断时,字符串数据的值总是包含上一次读取的数据(字符有点歪斜)

示例输出

Enter Password:
使用我的写方法,我输入密码,我从读取返回这个

Lnther Password:
ogin OK
Lnther Password:
ogin OK
Command return
使用我的write方法,我输入一个命令,我从read返回这个命令

Lnther Password:
ogin OK
Lnther Password:
ogin OK
Command return
如您所见,响应始终包含它所包含的以前的响应。我希望响应只包括从服务器返回的新行。我错了吗?我需要清除缓冲区吗


提前感谢

我回答了我自己的问题!我必须清除缓冲区

Array.Clear(objBuffer, 0, objBuffer.Length);
这是新方法

private void ReadCallback(IAsyncResult objResult)
{
    NetworkStream objStream = objClient.GetStream();
    byte[] objBuffer = (byte[])objResult.AsyncState;

    objStream.EndRead(objResult);

    string strData = ASCIIEncoding.ASCII.GetString(objBuffer, 0, objBuffer.Length);

    //my data handling methods go here, removed for simplicity

    //I had to clear my buffer!!
    Array.Clear(objBuffer, 0, objBuffer.Length);

    objStream.BeginRead(objBuffer, 0, objBuffer.Length, ReadCallback, objBuffer);
}