做UDP/TCP怎么能不用死循环 如题!请高手给代码示例! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用异步方式..这个可能对你有帮助http://blog.csdn.net/zgke/archive/2009/01/20/3838844.aspx public void BeginAcceptData() { udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null); } public void ReceiveCallback(IAsyncResult iar) { try { IPEndPoint ipe = (IPEndPoint)iep; int receiveBytes = udpclient.Client.EndReceiveFrom(iar, ref ep); if (receiveBytes > 0) { byte[] receiveByte = new byte[receiveBytes]; Array.Copy(so.buffer, 0, receiveByte, 0, receiveBytes); UDPdata udata = new UDPdata(); udata.date = receiveByte; udata.ep = ipe; ReceiveData(this, new UDPNetEventArgs(udata)); } udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null); } catch { } }回调 public void BeginAcceptData() { udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null); } public void ReceiveCallback(IAsyncResult iar) { try { IPEndPoint ipe = (IPEndPoint)iep; int receiveBytes = udpclient.Client.EndReceiveFrom(iar, ref ep); if (receiveBytes > 0) { byte[] receiveByte = new byte[receiveBytes]; Array.Copy(so.buffer, 0, receiveByte, 0, receiveBytes); UDPdata udata = new UDPdata(); udata.date = receiveByte; udata.ep = ipe; ReceiveData(this, new UDPNetEventArgs(udata)); } udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null); } catch { } } UDP本来就是发出去就不负责的,根本不存在等的问题。 http://www.cnblogs.com/zhangpengshou/archive/2008/10/09/1307622.html比较简单的例子 看错LZ的意思不用循环,采用异步编程,实质上是采用了递归算法http://www.cnblogs.com/fxwdl/archive/2006/08/10/473467.html这个是TCP异步编程的例子 C#获取应用程序目录 给控件添加 鼠标单击事件 如何通过GUI写入文件 文本文件导入到数据库 找不到类型或命名空间名称“EventArgs”(是否缺少 using 指令或程序集引用?)是什么意思? 怎样将textbox1中的内容转换为decimal类型 100分,请教用C#如何实现类似网游里的聊天面板!在线等! net 安装项目制作过程中的问题!急啊 求帮忙,存入数据库的错误。ExecuteNonQuery: CommandText 属性尚未初始化 如何理解类名(或类型名)+this[int index]? ADO.net数据库访问 关于 DataView.RowFilter 的问题
这个可能对你有帮助
http://blog.csdn.net/zgke/archive/2009/01/20/3838844.aspx
{
udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null);
}
public void ReceiveCallback(IAsyncResult iar)
{
try
{
IPEndPoint ipe = (IPEndPoint)iep;
int receiveBytes = udpclient.Client.EndReceiveFrom(iar, ref ep);
if (receiveBytes > 0)
{
byte[] receiveByte = new byte[receiveBytes];
Array.Copy(so.buffer, 0, receiveByte, 0, receiveBytes);
UDPdata udata = new UDPdata();
udata.date = receiveByte;
udata.ep = ipe;
ReceiveData(this, new UDPNetEventArgs(udata));
}
udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null);
}
catch
{
}
}回调
public void BeginAcceptData()
{
udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null);
}
public void ReceiveCallback(IAsyncResult iar)
{
try
{
IPEndPoint ipe = (IPEndPoint)iep;
int receiveBytes = udpclient.Client.EndReceiveFrom(iar, ref ep);
if (receiveBytes > 0)
{
byte[] receiveByte = new byte[receiveBytes];
Array.Copy(so.buffer, 0, receiveByte, 0, receiveBytes);
UDPdata udata = new UDPdata();
udata.date = receiveByte;
udata.ep = ipe;
ReceiveData(this, new UDPNetEventArgs(udata));
}
udpclient.Client.BeginReceiveFrom(so.buffer, 0, so.buffer.Length, SocketFlags.None, ref ep, new AsyncCallback(ReceiveCallback), null);
}
catch
{
}
}
比较简单的例子
http://www.cnblogs.com/fxwdl/archive/2006/08/10/473467.html
这个是TCP异步编程的例子