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

环境:假设有A、B两台主机,A上开启多个线程(500),每个线程均与B建立一个socket连接(UDP连接,同步方式,B采用同一个监听端口),然后A上的各个线程分别往B发送socket消息(每个线程发3000次)。B开启一个监听端口,一但Accept消息就丢给一个新开的线程去处理。观察:在A和B上分别输出发送与接收到的消息,发现A可以将所有消息发送出去,但是B并没有接收到所有A发送过来的消息,似乎产生了丢失。没有捕获异常,程序也并没有报错。我想知道有什么方法可以解决这个问题?没有分,坐等好人!

第1个回答  2012-07-10
UDP是面向无连接的,程序是不会报错的,要是必须用UDP的话,最好自己加入一些可靠机制,例如停等待机制,重发机制,才弥补UDP的不可靠性。
第2个回答  2012-06-30
UDP是无连接的协议,不保证消息一定被收到。所以如果要解决这个问题:
1、换TCP协议传输
2、自己实现udp的可靠传输,代码量会很大,而且很难写。追问

但是如果是单线程传输的话却没有丢失数据,就是随着线程数增加数据丢失的越多,我猜测是多线程并发。

追答

跟多线程单线程关系不大
采用UDP协议总是会丢包的,如果需要保证全收到就需要自己程序里做控制,检测未收到的包,然后重发,直到所有传输完成

第3个回答  2012-06-28
端口问题!
第4个回答  2012-06-28
自己给自己机器发吗,如果给别人发的话,那得考虑网络问题,UDP不验证网络通不通的追问

是自己给自己机器发的,如果是A机器上单个线程接收的数据基本没有丢失,但是如果线程增加接收率就会一直下降

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网