北國狼人的部落格
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-159 評論-114 文章-7 trackbacks-0
用戶NIO寫服務器,必須多加處理OP_WRITE,不會丟包
服務器往外發數據包,不是光一個socketChannel.write(bb); 就完事了
那是理想狀態。。
用我方法才能保證發出,即使客戶端連接很濫
public
static
long
flushChannel(SocketChannel socketChannel,ByteBuffer bb,
long
writeTimeout)
throws
IOException
{
SelectionKey key
=
null
;
Selector writeSelector
=
null
;
int
attempts
=
0
;
int
bytesProduced
=
0
;
try
{
while
(bb.hasRemaining())
{
int
len
=
socketChannel.write(bb);
attempts
++
;
if
(len
<
0
)
{
throw
new
EOFException();
}
bytesProduced
+=
len;
if
(len
==
0
)
{
if
(writeSelector
==
null
)
{
writeSelector
=
Selector.open();
if
(writeSelector
==
null
)
{
//
Continue using the main one
continue
;
}
}
key
=
socketChannel.register(writeSelector, key.OP_WRITE);
if
(writeSelector.select(writeTimeout)
==
0
)
{
if
(attempts
>
2
)
throw
new
IOException(
"
Client disconnected
"
);
}
else
{
attempts
--
;
}
}
else
{
attempts
=
0
;
}
}
}
finally
{
if
(key
!=
null
)
{
key.cancel();
key
=
null
;
}
if
(writeSelector
!=
null
)
{
//
Cancel the key.
writeSelector.selectNow();
writeSelector.close();
}
}
return
bytesProduced;
}
posted on 2008-11-19 12:08
北國狼人的BloG
閱讀(1450)
評論(1)
編輯
收藏
評論:
#
re: 用戶NIO寫服務器,必須多加處理OP_WRITE,不會丟包
2010-11-09 16:14 |
raymond
好用,頂一個!
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(33)
給我留言
查看公開留言
查看私人留言
隨筆分類
3D至尊寶(1)
人生各層面經驗積累(15)
關愛IT人士健康(15)
達內學習總結(42)
隨筆檔案
2018年11月 (2)
2012年3月 (1)
2011年8月 (1)
2011年1月 (1)
2010年12月 (2)
2010年8月 (1)
2010年6月 (3)
2010年5月 (3)
2010年4月 (11)
2010年3月 (8)
2010年2月 (4)
2010年1月 (4)
2009年12月 (6)
2009年11月 (1)
2009年10月 (3)
2009年9月 (3)
2009年8月 (3)
2009年6月 (1)
2009年5月 (1)
2009年4月 (1)
2009年1月 (1)
2008年12月 (1)
2008年11月 (3)
2008年10月 (1)
2008年8月 (4)
2008年6月 (2)
2008年5月 (3)
2008年3月 (1)
2008年2月 (1)
2008年1月 (2)
2007年12月 (2)
2007年10月 (3)
2007年9月 (1)
2006年11月 (1)
2006年9月 (1)
2006年8月 (3)
2006年7月 (2)
2006年6月 (1)
2006年5月 (1)
2006年4月 (5)
2006年3月 (7)
2006年2月 (7)
2006年1月 (12)
2005年12月 (8)
2005年11月 (19)
2005年10月 (9)
文章分類
3D至尊寶
Web技術和趨勢(1)
原創(1)
翻譯Java文章(2)
文章檔案
2006年10月 (1)
2005年10月 (3)
Java學習論壇
3D至尊寶
Java最牛網站
搜索
最新評論
1.?re: xsl:value-of select="." 什么意思?[未登錄]
ffff
--ff
2.?re: 理解Java ClassLoader機制 |用Java說話,人氣戰勝時間!Come On
好文章
--godtree
3.?re: 理解Java ClassLoader機制 |用Java說話,人氣戰勝時間!Come On[未登錄]
好文章,收了,謝謝博主
--thinker
4.?re: 高效產生一組不重復的隨機數
要是要求產生的隨機數量特別大怎么辦啊
--ll
5.?re: AS3 位操作比較快
“看完還不明白,就不要搞計算機了。”
就沖著此話,為樓主的優越感深表擔憂
每個人都是從新手過來的,樓主發帖如果是為了分享,我很敬佩,如果是為了和裝13,那我只能笑笑
--調整心態啊樓主
閱讀排行榜
1.?RCP開發,如何解決 org.eclipse.core.runtime.CoreException: Plug-in TD was unable to load class td.app.Application.(14366)
2.?mysql_install_db --defaults-file=/etc/my.cnf --user=mysql(8198)
3.?IWAB0014E Unexpected exception occured 該死的問題,就是因為Eclipse + WTP 需要先配置Server,再生成webservice(6964)
4.?理解Java ClassLoader機制 |用Java說話,人氣戰勝時間!Come On(6513)
5.?J2ME 網絡連接(HTTP) 模擬器 WTK(4991)
評論排行榜
1.?RCP開發,如何解決 org.eclipse.core.runtime.CoreException: Plug-in TD was unable to load class td.app.Application.(9)
2.?給自己的軟件加保險,用java獲取硬盤序列號(8)
3.?不要寫垃圾代碼!!!(8)
4.?反日行動從現在開始,從每個中國人,每個程序員做起!不用日本東西,不給日本人打工!!!(8)
5.?IWAB0014E Unexpected exception occured 該死的問題,就是因為Eclipse + WTP 需要先配置Server,再生成webservice(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 北國狼人的BloG
主站蜘蛛池模板:
亚洲色成人四虎在线观看
|
国产黄色片免费看
|
亚洲最大福利视频
|
曰批免费视频播放免费
|
国产精品免费无遮挡无码永久视频
|
野花高清在线电影观看免费视频
|
亚洲日韩在线观看免费视频
|
亚洲国色天香视频
|
gogo免费在线观看
|
亚洲男人的天堂在线va拉文
|
亚洲av一本岛在线播放
|
99久久99这里只有免费的精品
|
午夜精品在线免费观看
|
亚洲电影中文字幕
|
精品久久久久久无码免费
|
成人免费淫片在线费观看
|
亚洲激情在线视频
|
国产精品永久免费
|
国产亚洲午夜高清国产拍精品
|
亚洲精品无码国产片
|
久久精品国产大片免费观看
|
久久亚洲私人国产精品vA
|
男女拍拍拍免费视频网站
|
国产亚洲综合成人91精品
|
午夜免费国产体验区免费的
|
在线免费观看毛片网站
|
美女视频黄a视频全免费网站一区
|
美女视频黄的全免费视频网站
|
久久久久久亚洲精品
|
99久久精品日本一区二区免费
|
久久亚洲AV无码精品色午夜麻豆
|
在线看片免费人成视频久网下载
|
无码精品A∨在线观看免费
|
亚洲精品美女久久7777777
|
国产福利视精品永久免费
|
亚洲老熟女五十路老熟女bbw
|
亚洲精品国产电影
|
亚洲精品免费在线
|
久久精品国产亚洲AV无码麻豆
|
亚洲精品动漫人成3d在线
|
99精品视频在线视频免费观看
|