佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1122|回复: 3

[求助]socket的问题。

[复制链接]
发表于 14-7-2007 01:58 PM | 显示全部楼层 |阅读模式
我是说java的socket,但其他的language也应该一样把。

我想问socket.linger ,我已看了他的discription,但我有一点不明白。
socket的linger是怎样算的。如果我set10秒,
他是不是当没有任何data transfer的时候开始算,10秒后短线?
client socket和server socket,是不是其中一边set,两边都有效?

当我close socket的时候,是不是close一边就可以了?
然后第二边会自己close。


当我用object output stream,write了后就close socket。
如过我的object很大,10kb,而我的internet线只有2kb,他要5秒来send,
他是不是会等我的object send完了才close socket。(sript在object .write那里停止。
还是所有data会buffer在network card or window,然后等他自己send。


我想写一个p2p file sharing,我的testing都是一架电脑试的。
所以不能做标准。

还有一个问题,因为是p2p file sharing,所以我想limit output。
也就是limit upload,有什么hint?怎样detect。
ps:adsl的线都是不能让upload max的。
回复

使用道具 举报


ADVERTISEMENT

发表于 16-7-2007 04:18 PM | 显示全部楼层
原帖由 XxX_hunter 于 14-7-2007 01:58 PM 发表
如果我set10秒,
他是不是当没有任何data transfer的时候开始算,10秒后短线?

call close()的时候开始算,有data会等10秒。

client socket和server socket,是不是其中一边set,两边都有效?

其中一边set,另一边没有效。譬如说server set linger 10s,你close server socket时,client马上detect到做其他事情,而server会等10s才真正close。

当我close socket的时候,是不是close一边就可以了?
然后第二边会自己close。

当你close socket,另一边会知道,但不等于close,另一边detect到过后要自己call close才算close。

当我用object output stream,write了后就close socket。
如过我的object很大,10kb,而我的internet线只有2kb,他要5秒来send,
他是不是会等我的object send完了才close socket。(sript在object .write那里停止。
还是所有data会buffer在network card or window,然后等他自己send。

这个就是linger了,没有set的话,你的buffer会send到一半就断掉。set的话,会等他send完或者等到timeout才断掉。

还有一个问题,因为是p2p file sharing,所以我想limit output。
也就是limit upload,有什么hint?怎样detect。
ps:adsl的线都是不能让upload max的。

用size和time来detect,每隔几十或几百milli seconds call recv()一次,每call一次只收一小部分。最后收完了memcat起来(C的做法是这样,我想java应该也一样。)譬如说:limit to 5kbps,我每500ms call一次recv(),每次recv 2.5kb data size。

但你考虑到adsl line未必能一收就收2.5kb,这个有几种solution。你可以做一个timer来控制recv()的data size,每一秒检查 downloaded size/total downloaded time。譬如说10秒后收了45kb(expected是50kb),所以10秒后你可以开放致recv 7.5kb直到expected byte =  actual recieved byte。不过最简单的做法还是不理end user,要知道adsl speed和你的speed无关,责任要推清楚。
回复

使用道具 举报

 楼主| 发表于 18-7-2007 01:29 AM | 显示全部楼层
谢谢高手指教,
小第受教
回复

使用道具 举报

发表于 30-7-2007 12:18 PM | 显示全部楼层
原帖由 XxX_hunter 于 18-7-2007 01:29 AM 发表
谢谢高手指教,
小第受教


你试了没有?可行吗?我是从C的角度去看的,java的应该也一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 16-6-2024 04:56 PM , Processed in 0.076862 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表