异步读写数据TcpClient,为啥参数类中的值丢了呢
pooky 2016-05-31 07:01:23 public void myReadCallBack1(IAsyncResult ar)
{
MyData state = (MyData)ar.AsyncState;
string IPPort = state.tcp.Client.RemoteEndPoint.ToString();
string ip = IPPort.Substring(0, IPPort.IndexOf(":"));
int numberOfBytesRead = state.tcp.GetStream().EndRead(ar);
if (numberOfBytesRead > 0)
{
StringBuilder sb = new StringBuilder(BitConverter.ToString(state.buffer, 0, numberOfBytesRead));
OnReceived(ip, sb);
lock (locker)
{
foreach (MyData oldRD in CtrlDataList1)
{
if (oldRD.tcp == state.tcp)
{
CtrlDataList1.Remove(oldRD);
//新接收的数据
byte[] data = new byte[numberOfBytesRead];
Array.Copy(state.buffer, data, numberOfBytesRead);
MyData newRD = new MyData(oldRD, oldRD.buffer.Concat(data).ToArray());
CtrlDataList1.Add(newRD);
break;
}
}
}
}
state.buffer = new byte[1000];
state.tcp.GetStream().BeginRead(state.buffer, 0, state.buffer.Length, readCallBack1, state);
}
private void myWriteCallBack(IAsyncResult ar)
{
MyData state = (MyData)ar.AsyncState;
string IPPort = state.tcp.Client.RemoteEndPoint.ToString();
string ip = IPPort.Substring(0, IPPort.IndexOf(":"));
state.tcp.GetStream().EndWrite(ar);
StringBuilder sb = new StringBuilder(BitConverter.ToString(state.buffer));
OnSend(ip, sb);
//接收
if (state.tcp.GetStream().CanRead)
{
MyData newRD = new MyData(state, new byte[1000]);
newRD.tcp.GetStream().BeginRead(newRD.buffer, 0, newRD.buffer.Length, readCallBack1, newRD);
}
}
就是这个MyData,定义了很多变量,发出的时候是有值的,但是读回来的时候数据丢了(buffer和tcp的值没丢,我想要保存的中间变量的值都没了)。
帮忙看看问题出在哪里?谢谢!