C# Socket 异步通讯疑问

问题描述

本人初学者用异步的方法建了个UDP接收服务器经过压力测试客户端发送10W条数据(10秒左右全部发出)使用异步丢包达到20-30%应该是启动异步的时候有一段真空期没有有效的监听在运行导致数据接收失败请问这个问题如何解决同样的服务器端使用同步接收正常

解决方案

解决方案二:
自己做服务器,工作量太大,可以试一下来自英国的开源的networkcomms2.31通信框架下载地址:http://pan.baidu.com/s/1nt84xNr
解决方案三:
引用楼主qq_25949727的回复:

本人初学者用异步的方法建了个UDP接收服务器经过压力测试客户端发送10W条数据(10秒左右全部发出)使用异步丢包达到20-30%应该是启动异步的时候有一段真空期没有有效的监听在运行导致数据接收失败请问这个问题如何解决同样的服务器端使用同步接收正常

什么叫“有一段真空期”呢?如果你需要等到服务器准备好才开始发送,那么就先让客户端接收服务器发来的消息,然后再开始发送10w消息呗。另外,udp本来就是不可靠的,当你连续发10w消息时,不能保证对方都能收到。在互联上由于各种意想不到的问题,能收到80%也算不错了。
解决方案四:
我说的真空期是启动回调函数以后监听应该是失效了,因为重新启动监听是在回调函数处理完接收工作以后.流程如下步知道我理解的对不服务器异步开始监听----》收到信息----【》回调函数---》处理信息】----》递归监听在回调函数到处理信息期间这个时间监听是不是失效的哦。因为信息密集修改发送函数后大概1秒8W条数据我做了个服务器验证信息就是客户端将发送信息增加前缀验证码---》服务器接收信息---》服务器读取信息前缀---》发送给客户端----》客户端验证信息确定那些信息服务器已经收到-----》失败重发。也不是自己做服务器只是学习。。所谓的10W条只是个测试。。。
解决方案五:
呵呵。。写C#才一个星期。。没什么编程基础还不是太了解异步的工作原理
解决方案六:
引用3楼qq_25949727的回复:

服务器异步开始监听----》收到信息----【》回调函数---》处理信息】----》递归监听在回调函数到处理信息期间这个时间监听是不是失效的哦。因为信息密集修改发送函数后大概1秒8W条数据我做了个服务器验证信息就是客户端将发送信息增加前缀验证码---》服务器接收信息---》服务器读取信息前缀---》发送给客户端----》客户端验证信息确定那些信息服务器已经收到-----》失败重发。

可能是你处理并发多线程程序的“累计”时没有同步,造成了数据被覆盖了。udp本来就是进行“不可靠通讯”的。如果你做“验证-重发”机制,那么你的程序比tcp还慢,就没有必要使用udp了。
解决方案七:
udp的不可靠性问题,在本机、小程序下一般来说测试不出来。当你用千兆网局域网的两台机器测试,在网络比较繁忙的时候(或者路由器收到部分攻击的时候)就能明显测试到开始频繁丢包了。跨几个交换机、几个网络、距离远一些,就更明显。所以udp都使用在“丢包也无所谓”的业务上的。
解决方案八:
谢谢了再研究研究。。。。

时间: 2024-09-20 04:12:46

C# Socket 异步通讯疑问的相关文章

.net的socket异步通讯示例分享

 这篇文章主要介绍了.net的socket异步通讯示例,操作在下面,需要的朋友可以参考下 1.首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client   2.然后添加服务端代码,添加命名空间,界面上添加TextBox控件    代码如下: using System.Net; using System.Net.Sockets;     3.FormLoad方法添加代码    代码如下: private void Form1_Load(object sender,

.net的socket异步通讯示例分享_实用技巧

1.首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2.然后添加服务端代码,添加命名空间,界面上添加TextBox控件 复制代码 代码如下: using System.Net;using System.Net.Sockets; 3.FormLoad方法添加代码 复制代码 代码如下: private void Form1_Load(object sender, EventArgs e)        {            IPEndPoint epS

Socket编程 (异步通讯,解决Tcp粘包) - Part3

原文 http://www.cnblogs.com/zengqinglei/archive/2013/05/14/3078842.html Socket编程 (异步通讯,解决Tcp粘包) 从上一章的通讯中,我们发现如果使用Tcp连续发送消息会出现消息一起发送过来的情况,这样给我们编程造成一定的问题,给我们的信息解析造成一定的问题.那么这篇文章就将针对以上问题给出解决方案......   问题一般会出现的情况如下,假设我们连续发送两条两天记录("我是liger_zql"): 模拟发送示例

Socket编程 (异步通讯,解决Udp丢包) - Part4

原文http://www.cnblogs.com/zengqinglei/archive/2013/05/15/3079007.html Socket编程 (异步通讯,解决Udp丢包) 对于基于socket的udp协议通讯,丢包问题大家应该都见怪不怪了,但我们仍然希望在通讯方面使用Udp协议通讯,因为它即时,消耗资源 少,响应迅速,灵活性强无需向Tcp那样建立连接消耗很长的时间等等很有优势的理由让我们对Udp通讯寄予了厚望.但它也存在一个不好的特点,经常丢包是 时常发生的事.可能各位大侠已经有了

TCP通信socket异步,客户端报异常:目标主机积极拒绝

问题描述 TCP通信socket异步,客户端报异常:目标主机积极拒绝 服务端只监听时,客户端建立1500个连接请求都可以正常建立连接,但当服务端改成建立连接后触发一个事件给客户端发送数据时,客户端异常:目标主机积极拒绝,只能建立部分连接.是何原因,希望有老师可以指点一下.不胜感激!! 解决方案 Socket(Tcp)通信客户端 解决方案二: 客户端接收的数据是否正确处理,然后就是看一下你服务器发送数据给客户端后,是不是关闭了连接

ajax-PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册

问题描述 PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册 PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册PHP+Ajax 异步通讯实现用户名邮箱验证是否已注册 解决方案 reg.php 注册页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> P

socket-PHP SOCKET的通讯问题

问题描述 PHP SOCKET的通讯问题 因为公司要求 用PHP做服务器 C做客户端进行访问 然后会发生一些问题 经常客户端 请求不到服务器的问题 请问是什么原因 但是有时候又非常正常

c# 2.0-C#用Socket异步时出现错误

问题描述 C#用Socket异步时出现错误 各位大侠: 我刚用 C# 写Socket 代码,服务器端用异步监控客户端,代码如下 //开启服务器端监控---Begin internal void MonitorClient() { IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 端口号); Socket serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolT

opc-OPC客户端异步通讯初始化

问题描述 OPC客户端异步通讯初始化 CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object // Create Instance of Callback Object using an ATL template CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback); 编译正常,但是执行到这里_pA