9 个解决方案
#1
select 函数可以知道,套接字是否可读,可写等。可读时再用recvfrom读,就不会卡住。
如果做服务器的话,windows下一般用完成端口,linux下用epoll模型。比select复杂些。
如果做服务器的话,windows下一般用完成端口,linux下用epoll模型。比select复杂些。
#2
一般用ioctlsocket检查是否有内容可读,没内容就跳过,没你这么玩的。
#3
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
#4
可以学一下select,对你应该有帮助
#5
用事件模式比较简单http://blog.csdn.net/wanjingwei/article/details/4306609
#6
我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
#7
你好我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
#8
丢包和乱序是UDP的基本特点, 做设计的时候就考虑。 一般做法:1. A/B 连个UDP通道发送相同内容,以减少丢包几率
2. 缓存乱序到底的UDP包, 如果超时或队列长度超限的时候, 判定为丢包。
3. 丢包的时候,通过TCP去请求发送丢失的包。
实现起来,比较复杂, 有一个商业话库可以处理这种情况:LBM。 如果应用对丢包、乱序敏感的话, 还是用TCP吧。
#9
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
丢包和乱序是UDP的基本特点, 做设计的时候就考虑。 一般做法:1. A/B 连个UDP通道发送相同内容,以减少丢包几率
2. 缓存乱序到底的UDP包, 如果超时或队列长度超限的时候, 判定为丢包。
3. 丢包的时候,通过TCP去请求发送丢失的包。
实现起来,比较复杂, 有一个商业话库可以处理这种情况:LBM。 如果应用对丢包、乱序敏感的话, 还是用TCP吧。
谢谢!!
#1
select 函数可以知道,套接字是否可读,可写等。可读时再用recvfrom读,就不会卡住。
如果做服务器的话,windows下一般用完成端口,linux下用epoll模型。比select复杂些。
如果做服务器的话,windows下一般用完成端口,linux下用epoll模型。比select复杂些。
#2
一般用ioctlsocket检查是否有内容可读,没内容就跳过,没你这么玩的。
#3
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
#4
可以学一下select,对你应该有帮助
#5
用事件模式比较简单http://blog.csdn.net/wanjingwei/article/details/4306609
#6
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
#7
select 函数可以知道,套接字是否可读,可写等。可读时再用recvfrom读,就不会卡住。
如果做服务器的话,windows下一般用完成端口,linux下用epoll模型。比select复杂些。
你好我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
#8
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
丢包和乱序是UDP的基本特点, 做设计的时候就考虑。 一般做法:1. A/B 连个UDP通道发送相同内容,以减少丢包几率
2. 缓存乱序到底的UDP包, 如果超时或队列长度超限的时候, 判定为丢包。
3. 丢包的时候,通过TCP去请求发送丢失的包。
实现起来,比较复杂, 有一个商业话库可以处理这种情况:LBM。 如果应用对丢包、乱序敏感的话, 还是用TCP吧。
#9
1. 多路复用: select 带timeout 或者其他类似的poll,epoll
2. 异步IO: iocp(windows), asio
3. 非阻塞的socket, 自己轮询。
4. 多线程:开一个IO线程阻塞读, 读到数据通知主线程。
方法很多,自己斟酌利弊。
我做的是网络时间同步,UDP通信方式,我用了select但是发现丢包率很高,但这也不要紧,我可以多发几次请求,关键是有时候读取到的包是响应上一次请求的,即错误的时间报文,请问这个要怎么处理?
丢包和乱序是UDP的基本特点, 做设计的时候就考虑。 一般做法:1. A/B 连个UDP通道发送相同内容,以减少丢包几率
2. 缓存乱序到底的UDP包, 如果超时或队列长度超限的时候, 判定为丢包。
3. 丢包的时候,通过TCP去请求发送丢失的包。
实现起来,比较复杂, 有一个商业话库可以处理这种情况:LBM。 如果应用对丢包、乱序敏感的话, 还是用TCP吧。
谢谢!!