异步网络通信编程问题
在异步通信中,在异步接受数据完成时 stream.EndRead(result) 报错“无法从传输连接中读取数据: 由于线程退出或应用程序请求,已放弃 I/O 操作”,怎么回事,线程出错?代码如下:
private void BeginReceiveData()
{
if (m_Connected)
{
if (!m_Client.Connected)
{
ReConnect();
return;
}
StateObject state = new StateObject();
state.buffer=new byte[m_BufferSize];
state.dataStream = m_Client.GetStream();
m_Client.GetStream().BeginRead(state.buffer, 0, m_BufferSize, new AsyncCallback(ReadCallBack), state);
}
}
private void ReadCallBack(IAsyncResult result)
{
if (!m_Connected)
return;
StateObject state = (StateObject)result.AsyncState;
NetworkStream stream = state.dataStream;
try
{
if (!stream.CanRead)
return;
int byteLen = stream.EndRead(result); //这里报错
//if (byteLen == 0)
//{
// ReConnect();
// return;
//}
DataUnit duReceive = new DataUnit();
duReceive.Data = new byte[byteLen];
Array.Copy(state.buffer,duReceive.Data,byteLen);
List<DataUnit> duList = BasePacket.ParsePacket(duReceive, ref this.m_DataLeft);
if (duList.Count > 0)
{
for (int i = 0; i < duList.Count; i++)
{
packQueue.AddPacket(new BasePacket(duList[i]));
}
}
this.m_LastRecvTime = DateTime.Now;
Array.Clear(state.buffer, 0, m_BufferSize);
stream.BeginRead(state.buffer, 0, m_BufferSize, new AsyncCallback(ReadCallBack), state);
}
catch(Exception ex)
{
string s = ex.Message;
ReConnect();
}