免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8780 | 回复: 22
打印 上一主题 下一主题

关于SOCKET下的数据重发,希望大家能给些思路! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-06 21:15 |只看该作者 |倒序浏览
我现在在写一个SOCKET的程序,系统要求:
1.每一条从客户端发出的信息包,服务端收到以后,都要回一条确认包给客户端
2.如果在规定的时间T秒后,客户端没有收到信息包A的确认包,客户端将连续发送A数据包N次
3.信息包采用并发方式,在上一条信息未收到确认包前,可以连续发送N个信息包.

上面是系统的要求,我的思路是每发送一个信息包,就用SELECT,时间定为T,如果在规定时间里没有收到确认包,就重发,可是这个方法似乎并不适合于并发方式,希望大家能指点我一下,象这种问题大概的思路是怎样的,有没有什么可以参考一下的,谢谢大家了!

论坛徽章:
0
2 [报告]
发表于 2005-06-07 00:09 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

为什么要采用并发?
UDP就不用说了, TCP协议是一个stream, 从应用层角度看, 先发的一定会被对方先收到的, 但是可能存在这种情况, 调用一次write, 可能只发送了一半数据出去, 而你另外一个并发的write, 可能接着这一半的数据发出去, 那么你的数据就会乱了.

论坛徽章:
0
3 [报告]
发表于 2005-06-07 03:39 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

我可能没有说清楚,其实每一个信息包都是独立而且完整的,就象货运公司,一旦有新的货物,就装箱运往目的地,所以和其他的货物是完全没有关系的!

论坛徽章:
0
4 [报告]
发表于 2005-06-07 08:36 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

tcp/ip本来就是可靠传输的,如果传输不正常的话它会自动重发,为什么要这种机制?是udp的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2005-06-07 09:17 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

[quote]原帖由 "cellar"]tcp/ip本来就是可靠传输的,如果传输不正常的话它会自动重发,为什么要这种机制?是udp的?[/quote 发表:

要想骗客户的钱,这种机制还是必要的。

论坛徽章:
0
6 [报告]
发表于 2005-06-07 10:14 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

1 一个线程一直发送数据包,每发送成功一个数据包就缓存一次。
2 一个线程一直监控缓存中的数据包,如果超时没有收到相应包就重发,并且增加重发次数,超过重发次数的数据包就丢掉
3 收到相应包后就去缓存中查找,如果找到对应的包就从缓存中删除

论坛徽章:
0
7 [报告]
发表于 2005-06-07 10:15 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

1 一个线程一直发送数据包,每发送成功一个数据包就缓存一次。
2 一个线程一直监控缓存中的数据包,如果超时没有收到相应包就重发,并且增加重发次数,超过重发次数的数据包就丢掉
3 收到相应包后就去缓存中查找,如果找到对应的包就从缓存中删除

论坛徽章:
0
8 [报告]
发表于 2005-06-07 10:44 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

原帖由 "flw" 发表:

要想骗客户的钱,这种机制还是必要的。


呵呵,版主可真是一针见血啊,可是我们也不可能要求每一个客户都去读TCP/IP吧!

论坛徽章:
0
9 [报告]
发表于 2005-06-07 11:32 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

原帖由 "mywwwchinaunixnet" 发表:
1 一个线程一直发送数据包,每发送成功一个数据包就缓存一次。
2 一个线程一直监控缓存中的数据包,如果超时没有收到相应包就重发,并且增加重发次数,超过重发次数的数据包就丢掉
3 收到相应包后就去缓存中查找,..........


我也是这样想的,不过我想用三个线程:
线程1: 从待发缓存区中提取信息包并发送,然后将其放入待确认缓存,但是如果信息包的重发次数变量不等于0,那么就不用此操作!
线程2: 监控待确认缓存中的信息包,如果超时就将信息包放入待发缓存区里,重发次数变量+1
线程3: 监听SOCKET,如果接受到的是确认包,就删除相应的信息包

因为并发的信息包是有滑动窗口控制的,所以我想缓存区就用QUEUES来实现,但是有一个关键的问题我不知道该如何实现:
如何对每一条被发送了的信息包进行时间监控,以及如何探测到超时的信息包?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2005-06-07 11:41 |只看该作者

关于SOCKET下的数据重发,希望大家能给些思路!

原帖由 "simon_qwl" 发表:
呵呵,版主可真是一针见血啊,可是我们也不可能要求每一个
客户都去读TCP/IP吧!

不错,我们不能要求每个客户都去读 TCP/IP 原理,
所以你就不能跟客户说,“因为我们用的是 TCP/IP,所以我们什么都不需要做”,
而应该说,“我们用的是 TCP/IP 这种可靠的协议,而且即使是网络出了故障,我们还有差错保证和自动重传机制,可以确保在恶劣环境下仍然能够准确无误地传送数据”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP