[转].Net高效UDP异步编程 因为要写一个网络程序要用到UDP协议,UDP这东西比较麻烦,又不像TCP一样提供可靠的连接,发送接收的超时实在不好设计,最后只要用Timer来检测有没有想要的数据包-_#,不过这不是这次的重点,重点是怎么建立一种高效的UDP机制来实时接收服务器发送过来的数据包.
[转].Net高效UDP异步编程     CodeProject上有个例子是开个线程去同步接收,这样倒是可以满足我的程序需求,不过实际中遇到几个问题:
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程     
1.程序开销大,内存狂飙,接一次数据就要重新开一次线程
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程     
2.由于主界面和底层是完全隔离只是通过中间的接口来通讯,导致线程总是不能正常的结束,程序结束后还有一个进程在那里不知道干什么.
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程     于是翻阅MSDN,查找自己以前写的代码,最后还是决定用异步来接收,MSDN上UDP异步的例子不太好,有点敷衍的意思,用异步很好的解决了以上的问题,高效完成效率,代码如下: 
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程 
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程UdpClient qq_client;    
//Udp客户端
[转].Net高效UDP异步编程
qq_client = new UdpClient();
[转].Net高效UDP异步编程IPEndPoint remoteQQEP 
= new IPEndPoint(remotehost, remoteport);
[转].Net高效UDP异步编程qq_client.Connect(remoteQQEP);
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程AsyncCallback GetRecvBuffer 
= new AsyncCallback(ReceiveCallback);
[转].Net高效UDP异步编程qq_client.BeginReceive(GetRecvBuffer, 
null);   
[转].Net高效UDP异步编程这里用一个GetRecvBuffer的回掉来实现异步
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程 
[转].Net高效UDP异步编程
[转].Net高效UDP异步编程        
private void ReceiveCallback(IAsyncResult ar)
原文地址:
http://blog.csdn.net/fsc2988877/archive/2007/08/19/1750678.aspx

相关文章:

  • 2022-02-01
  • 2021-12-12
  • 2021-10-13
  • 2021-11-04
  • 2021-12-18
  • 2022-12-23
猜你喜欢
  • 2022-03-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-04
  • 2021-06-29
  • 2021-10-25
相关资源
相似解决方案