免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 我是好人
打印 上一主题 下一主题

请教一个关于Socket的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-02-10 12:50 |只看该作者
原帖由 perryhg 于 2006-2-9 12:31 发表
不推荐使用in.readLine()方法阻塞,如果没有数据传输,应该关闭socket,有数据时重新创建socket连接。你不能寄望socket建立的连接永远有效。用soTimeout万一对方没有出错,只是一段时间没有发送数据,你也把它关掉 ...


1、根据我们的设计要求,如果客户端长时间未输入命令,是可以强行断开的;

2、我不太明白你的意思,怎样才能实现“有数据时重新创建socket连接”?客户端每输入一个数据就重新连接吗??

[ 本帖最后由 我是好人 于 2006-2-10 12:53 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2006-02-10 12:59 |只看该作者
原帖由 cooljia 于 2006-2-9 13:34 发表
重启客户端linux server不会发送TCP RST么? 有点模糊...期望哪位大侠给个准确答案

如果用SO_TIMEOUT选项的话, 客户端如果正好在这段时间内没有消息, 怎么办?
如果楼主的想法只是期望判断client是否crash, shu ...


我们的设计要求是只允许一个客户端登录,如果KeepAlive,然后登录的客户端重启,要等几个小时才能允许其他人登录吗?这显然不和情理呀。

但还是感谢你!

论坛徽章:
0
13 [报告]
发表于 2006-02-10 21:04 |只看该作者
只是提几点想法作为思考。
当你通过SO_TIMEOUT把正常的客户端断开后,客户端是否会在有数据的时候再次自动连接?

在单线程模式下,如果客户端重启,而服务端还在等待前一个连接的SO_TIMEOUT,将导致重启后的客户端无法立即建立到服务器连接,只有等服务端SO_TIMEOUT以后释放了资源,客户端才能连接,可是客户端怎么知道服务端还有多久才TIMEOUT呢?这个是不是符合你们的设计要求呢?

论坛徽章:
0
14 [报告]
发表于 2006-02-13 09:12 |只看该作者
原帖由 perryhg 于 2006-2-10 21:04 发表
只是提几点想法作为思考。
当你通过SO_TIMEOUT把正常的客户端断开后,客户端是否会在有数据的时候再次自动连接?

在单线程模式下,如果客户端重启,而服务端还在等待前一个连接的SO_TIMEOUT,将导致重启后的客 ...


这的确是个问题,但我实在想不出什么好办法了。可否给我点思路??

论坛徽章:
0
15 [报告]
发表于 2006-02-13 11:43 |只看该作者
断开链接以后客户端做一个循环, 每次循环间隔N秒, 总计时间M秒, 去connect server. 有点象MSN断开连接以后啊, 哈哈.
M=服务器超时时间
N=这个看你个人爱好了

论坛徽章:
0
16 [报告]
发表于 2006-02-13 15:54 |只看该作者
原帖由 cooljia 于 2006-2-13 11:43 发表
断开链接以后客户端做一个循环, 每次循环间隔N秒, 总计时间M秒, 去connect server. 有点象MSN断开连接以后啊, 哈哈.
M=服务器超时时间
N=这个看你个人爱好了


1、没明白,客户端重新启动了,怎么循环?
2、我所说的客户端,是Linux下的Telnet,我是不能修改任何逻辑的。

论坛徽章:
0
17 [报告]
发表于 2006-02-13 16:20 |只看该作者
所以对于 serversocket.accept() 还是应该启动新的线程去处理啊,任何时候,新来的连接总是有效,至于旧的连接,就让它timeout以后自动回收吧。

论坛徽章:
0
18 [报告]
发表于 2006-02-14 09:34 |只看该作者
原帖由 perryhg 于 2006-2-13 16:20 发表
所以对于 serversocket.accept() 还是应该启动新的线程去处理啊,任何时候,新来的连接总是有效,至于旧的连接,就让它timeout以后自动回收吧。


您说的非常对,原来我也是这么考虑的,但为了回避权限分配和争用问题,我们的头不允许使用线程(我强烈反对,但没有用,谁让我是兵呢?)。偷偷告诉大家,现在还没有身份验证呢,就是说,只要知道IP,用Telnet就可以控制我们的系统!

感谢大家的参与!

论坛徽章:
0
19 [报告]
发表于 2006-02-17 17:32 |只看该作者
原帖由 我是好人 于 2006-2-14 09:34 发表


您说的非常对,原来我也是这么考虑的,但为了回避权限分配和争用问题,我们的头不允许使用线程(我强烈反对,但没有用,谁让我是兵呢?)。偷偷告诉大家,现在还没有身份验证呢,就是说,只要知道IP,用Telne ...


偷偷告诉大家,现在还没有身份验证呢,就是说,只要知道IP。。。。。。

够毛的,哈哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP