socket 异步接收不到数据问题

danny_2020 2012-07-24 09:16:37
代码如下:
public void CommuniteHelp_TCP()
{
while (true)
{
try
{
MREvent.Reset();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(AsynAccept), tcpListener);
MREvent.WaitOne();

}
catch (Exception ex)
{
System.Diagnostics.Debug.Print("运行方法: CommuniteHelp 发生错误:" + ex.Message);
}

}
}

private void AsynAccept(IAsyncResult mtcplisten)
{
TcpListener mtcpListener = (TcpListener)mtcplisten.AsyncState;
TcpClient mtcpClient = mtcpListener.EndAcceptTcpClient(mtcplisten);
MREvent.Set();
Thread thread_dotcp = new Thread(new ParameterizedThreadStart(ThreadAsynReceiveData));
thread_dotcp.IsBackground = true;
thread_dotcp.Start(mtcpClient);

}
private void ThreadAsynReceiveData(object mobj)
{
TcpClient mtcpClient = mobj as TcpClient;
byte[] receiveBytes = new byte[1024];

mtcpClient.Client.BeginReceive(receiveBytes, 0, 1024, SocketFlags.None, new AsyncCallback (doneAsynAccept), mtcpClient);


}
private void doneAsynAccept(IAsyncResult iar)
{
try
{
lock (lockobj)
{
TcpClient mtcpClient = (TcpClient)iar.AsyncState;
int dataCount = mtcpClient.Client.EndReceive(iar);
if (dataCount > 0)
{
byte[] receiveBytes = new byte[dataCount];
IAsyncResult Result= mtcpClient.Client.BeginReceive(receiveBytes, 0, dataCount, SocketFlags.None, new AsyncCallback(doneAsynAccept), mtcpClient); // 这里接收不到数据,请问为什么?

StructModel.tcpSendTo tcpsendto = new StructModel.tcpSendTo();
tcpsendto.point = ((IPEndPoint)mtcpClient.Client.RemoteEndPoint);
tcpsendto.oreceiveBytes = receiveBytes;
tcpsendto.receiveBytesLength = (ushort)dataCount;
tcpsendto.ns = mtcpClient.GetStream();
tcpsendto.tcpClient = mtcpClient;
DoWork(tcpsendto);
}


//mtcpClient.Close();
//mtcpClient = null;
}
}
catch (Exception ee)
{

ErrorLog.WriteErrorLog("CRTUClient_Udp:CRTUClient", "DoWork", "", ee);
}
finally
{
GC.Collect();
Thread.CurrentThread.Abort();
}

}
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
danny_2020 2012-07-24
  • 打赏
  • 举报
回复
恩,上面的说的正确,谢谢
只在此山中 2012-07-24
  • 打赏
  • 举报
回复
receiveBytes定义为窗体变量,不是函数变量. dataCount > 0时 receiveBytes就已经收到数据了.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧