C# socket 服务器接收数据丢失问题,用的是UDP传输方式,补充问题是详细的过程。 20

环境:假设有A、B两台主机,A上开启多个线程(500),每个线程均与B建立一个socket连接(UDP连接,同步方式,B采用同一个监听端口),然后A上的各个线程分别往B发... 环境:假设有A、B两台主机,A上开启多个线程(500),每个线程均与B建立一个socket连接(UDP连接,同步方式,B采用同一个监听端口),然后A上的各个线程分别往B发送socket消息(每个线程发3000次)。B开启一个监听端口,一但Accept消息就丢给一个新开的线程去处理。观察:在A和B上分别输出发送与接收到的消息,发现A可以将所有消息发送出去,但是B并没有接收到所有A发送过来的消息,似乎产生了丢失。没有捕获异常,程序也并没有报错。我想知道有什么方法可以解决这个问题?没有分,坐等好人! 展开
 我来答
lei736
2012-07-10
知道答主
回答量:2
采纳率:0%
帮助的人:3282
展开全部
UDP是郑塌铅面向无连接的,程序是不会报错的,要是必须用喊好UDP的话,最好自己加入一些可衫陵靠机制,例如停等待机制,重发机制,才弥补UDP的不可靠性。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
junsmooth
2012-06-30 · 超过15用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:55.1万
展开全部
UDP是无连稿伍段接的协议,不保证消息一定被收到橘配。所以如果要解决这个问题:
1、换键誉TCP协议传输
2、自己实现udp的可靠传输,代码量会很大,而且很难写。
追问
但是如果是单线程传输的话却没有丢失数据,就是随着线程数增加数据丢失的越多,我猜测是多线程并发。
追答
跟多线程单线程关系不大
采用UDP协议总是会丢包的,如果需要保证全收到就需要自己程序里做控制,检测未收到的包,然后重发,直到所有传输完成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a308595369
2012-06-28 · TA获得超过610个赞
知道小有建树答主
回答量:601
采纳率:0%
帮助的人:540万
展开全部
端口问题!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友67a7537
2012-06-28 · TA获得超过3120个赞
知道大有可为答主
回答量:9561
采纳率:0%
帮助的人:5381万
展开全部
自己给自己机器发吗,如果给别人发的话,那得考虑网络问题,UDP不验证网络通不通的
追问
是自己给自己机器发的,如果是A机器上单个线程接收的数据基本没有丢失,但是如果线程增加接收率就会一直下降
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式