社区
通信技术
帖子详情
请问如何在UDP上实现超时重发?急
dirdir
2001-06-26 09:43:49
我想在UDP上实现一个超时重发机制,但是当客户端接受服务器端的确认时(receivefrom),我得线程会被阻塞,无法响应时间消息,我怎么实现重发??
...全文
390
8
打赏
收藏
请问如何在UDP上实现超时重发?急
我想在UDP上实现一个超时重发机制,但是当客户端接受服务器端的确认时(receivefrom),我得线程会被阻塞,无法响应时间消息,我怎么实现重发??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caiyi9000
2001-06-28
打赏
举报
回复
BOOL NotBlock;
int blocksize = sizeof(BOOL);
NotBlock = TRUE;
setsockopt(m_socket, SOL_SOCKET, SO_DONTLINGER, (char*)¬Block, blocksize);
wwwunix
2001-06-26
打赏
举报
回复
用select函数可以让它不阻塞
dirdir
2001-06-26
打赏
举报
回复
请问怎么让它不阻塞哪?我只新手,很多东西我还不知道。请帮忙。
duuyuu
2001-06-26
打赏
举报
回复
这就是你的算法问题了,你为什么要让线程在接到确认时阻塞呢?
flywhc
2001-06-26
打赏
举报
回复
在win下编程,应该用WSAAsyncSelect比较好
int WSAAsyncSelect(
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent
);
s是你要操作的socket, hwnd是消息处理的窗口
wMsg是自定义的,比如WM_USER+0x100, lEvent是要处理的事件,比如FD_READ/FD_WRITE
在MFC里,用ON_MESSAGE(WM_USER+0x100,OnSocketEvent)映射,SDK就不用说啦。
当有数据到达时会收到这个消息,你就在OnsockeEvent里判断,如果是FD_READ就receivefrom
setsockopt一般是取消阻塞方式时才用。
unix下用select,实际是放到一个死循环里反复查询哪个socket有数据到达...
去阅读MSDN window socket部分吧。能用到的就这几个函数
dirdir
2001-06-26
打赏
举报
回复
请问如何用setsockopt设置成非阻塞方式
caiyi9000
2001-06-26
打赏
举报
回复
sokcet有阻塞和非阻塞两种模式。
阻塞socket指对此socket进行操作函数调用时,如receivefrom(),将处于阻塞状态,一直等到调用成功才返回。
非阻塞socket的操作则马上返回。
编程序时,创建的socket默认都是阻塞模式,所以根据需要你要自己将它设置为非阻塞模式。当然如果你用MFC提供的CAsyncSocket类,那么你就无须自己设置非阻塞模式了,因为此类已经封装好了非阻塞模式。
caiyi9000
2001-06-26
打赏
举报
回复
建议你用非阻塞socket,在Windwos下可以用setsockopt()将socket设置为非阻塞模式,也可以直接调用WSAAsyncSelect()异步事件注册函数给socket注册异步事件,此操作自动把socket设置为非阻塞模式。这样你在此socket上调用receivefrom或sendto等操作函数时,就不会使线程被阻塞了。
在UNIX下也可以用setsockopt()或select()进行设置。
实现
可靠的
UDP
传输类
实现
可靠的
UDP
传输。虽然名字叫UDT,但是和UDT有着本质区别(主要是不想费脑筋取名字),它可以像
UDP
一样
实现
多点自由传输,而无需像UDT那样必须建立服务器,然后等待连接然后在传输。 所用原理就是简单的 确认 +
超时
重发
机制。
c语言写的多协议多服务并发的服务器
c语言写的多协议多服务并发的服务器,主要用到多线程socket编程
易语言
UDP
工作线程
易语言
UDP
工作线程源码,
UDP
工作线程,回调函数,启动,停止,错误,发送数据,工作线程,
超时
重发
机制,启动IOCP,销毁IOCP,GetInt,mAlloc,mFree,PostWSARecv,PostWSASend,Release,Release2,WriteReturn,GetReturn,GetType,GetBuff,GetFrom,WriteType,WriteBuff,WriteF
简单的
UDP
通信JAVA代码
控制
超时
和
重发
,为解答一个网友的问题而编写的测试代码。
UDP
超时
重传机制
问题来源: 老式方法:
UDP
传输设定
超时
未N秒,发送一个请求后等待N秒钟,若
超时
都没有收到确认,则
重发
请求,
重发
一定次数后便丢弃。 老式方法不合理的原因:由于网络上影响因素的不同,可能RTT差别较大,设定一个固定的
超时
时间使资源不能得到合理应用。 较好的方法:根据实测的RTT及其他因素考虑在内来估计
超时
时间。 术语 RTO:重传
超时
Srtt:平滑化的RTT估算因子 Reevar:平滑化平均偏差估
通信技术
4,354
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章