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发送过来的消息,似乎产生了丢失。没有捕获异常,程序也并没有报错。我想知道有什么方法可以解决这个问题?没有分,坐等好人!
展开
4个回答
展开全部
UDP是面向无连接的,程序是不会报错的,要是必须用UDP的话,最好自己加入一些可靠机制,例如停等待机制,重发机制,才弥补UDP的不可靠性。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
UDP是无连接的协议,不保证消息一定被收到。所以如果要解决这个问题:
1、换TCP协议传输
2、自己实现udp的可靠传输,代码量会很大,而且很难写。
1、换TCP协议传输
2、自己实现udp的可靠传输,代码量会很大,而且很难写。
追问
但是如果是单线程传输的话却没有丢失数据,就是随着线程数增加数据丢失的越多,我猜测是多线程并发。
追答
跟多线程单线程关系不大
采用UDP协议总是会丢包的,如果需要保证全收到就需要自己程序里做控制,检测未收到的包,然后重发,直到所有传输完成
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
端口问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己给自己机器发吗,如果给别人发的话,那得考虑网络问题,UDP不验证网络通不通的
追问
是自己给自己机器发的,如果是A机器上单个线程接收的数据基本没有丢失,但是如果线程增加接收率就会一直下降
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询