UDP 接收数据同步 异步选择问题
同步加线程
使用事件并发处理接收到的数据
public void SyncRecive()
{
Task listen = new Task(() =>
{
while (true)
{
int length = connect.ReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
if (length != active.Length || packet.ToMessage() != active.ToMessage())
{
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
}
});
listen.Start();
}
异步
public void AsynRecive()
{
connect.BeginReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint, new AsyncCallback(AsynReciveCallback), null);
}
private void AsynReciveCallback(IAsyncResult asyncResult)
{
if (asyncResult.IsCompleted)
{
int length = connect.EndReceiveFrom(asyncResult, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
this.AsynRecive();
}
同步加线程接收效率明显高于异步
这样的情况下使用异步还有优势吗?
使用事件并发处理接收到的数据
public void SyncRecive()
{
Task listen = new Task(() =>
{
while (true)
{
int length = connect.ReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
if (length != active.Length || packet.ToMessage() != active.ToMessage())
{
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
}
});
listen.Start();
}
异步
public void AsynRecive()
{
connect.BeginReceiveFrom(this.packetBuffer, 0, this.packetBuffer.Length, SocketFlags.None, ref this.remoteEndPoint, new AsyncCallback(AsynReciveCallback), null);
}
private void AsynReciveCallback(IAsyncResult asyncResult)
{
if (asyncResult.IsCompleted)
{
int length = connect.EndReceiveFrom(asyncResult, ref this.remoteEndPoint);
byte[] packet = this.packetBuffer.Unpack(length);
this.counter++;
if (this.ReceiveData != null)
{
this.ReceiveData(packet, this.remoteEndPoint, null);
}
}
this.AsynRecive();
}
同步加线程接收效率明显高于异步
这样的情况下使用异步还有优势吗?
...全文
相关推荐
C#版UDP通讯
VS2010开发环境,C#版的UDP通讯,两个程序,实现点对点通讯。
C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中异步Udp客户端功能的实现、包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据)
做项目的时候用到了GCDAsyncUdpSocket开源库,所以在此总结下它的用法,作为笔记;GCDAsyncUdpSocket简介GCDAsyncUdpSocket开源类库是以苹果的GCD多任务处理机制完成的一个异步交互套接字通讯。如果需要使用同步的,则去寻找AsyncUdpSocket就可以了。该开源库完成了UDP之间的通信,使得UDP通信的编程变得更加简单;
udp.rar_UDP C++ 数据_UDP 传输_UDP 数据传输_UDP 文件 传输_udp文件传输
采用udp方式实现的数据传输,简单实用,修改后可以传输文件
高效的.Net UDP异步编程实现分析
重点是怎么建立一种高效的UDP机制来实时接收服务器发送过来的数据包.本文将介绍.Net UDP异步编程如何实现解决方案,有需求的朋友可以参考下


