讀者可以將**拷貝到編譯器上跑一跑,如果看了注釋還有不懂的地方,可以參考:
nio基礎(一)之buffer
nio基礎(二)之channel
nio基礎(三)之selector
第三篇尤為重要對看懂大體框架有很大意義。
public
class
const
}
/**
* 類說明:nio通訊客戶端
*/public
class
nioclient
//向伺服器傳送訊息
public
static
boolean
sendmsg
(string msg)
throws exception
public
static
void
main
(string[
] args)
throws exception
}
/**
* 類說明:nio通訊客戶端處理器
*/public
class
nioclienthandle
implements
runnable
catch
(ioexception e)
}public
void
stop()
@override
public
void
run(
)catch
(ioexception e)
/*迴圈遍歷selector*/
while
(started)
catch
(exception e)}}
}}catch
(ioexception e)}if
(selector!=null)
catch
(ioexception e)}}
/*具體的事件處理方法*/
private
void
handleinput
(selectionkey key)
throws ioexception
else system.
exit(-
1);}
/*處理讀事件,也就是當前有資料可讀*/
if(key.
isreadable()
)/*鏈路已經關閉,釋放資源*/
else
if(readbytes<0)
}}}/*進行連線*/
private
void
doconnect()
throws ioexception
else
}/*寫資料對外暴露的api*/
public
void
sendmsg
(string msg)
throws ioexception
private
void
dowrite
(socketchannel sc,string request)
throws ioexception
}
/**
* 類說明:nio通訊服務端
*/public
class
nioserver
public
static
void
main
(string[
] args)
}
/**
* 類說明:nio通訊服務端處理器
*/public
class
nioserverhandle
implements
runnable
catch
(ioexception e)
}public
void
stop()
@override
public
void
run(
)catch
(exception e)}}
}}catch
(throwable t)
}//selector關閉後會自動釋放裡面管理的資源
if(selector != null)
trycatch
(exception e)
}private
void
handleinput
(selectionkey key)
throws ioexception
//讀訊息
if(key.
isreadable()
)//鏈路已經關閉,釋放資源
else
if(readbytes<0)
}}}//傳送應答訊息
private
void
dowrite
(socketchannel channel,string response)
throws ioexception
}
nio通訊過程
初步了解nio,但是一直很難理解。網上看到一篇博文,感覺講的非常好。nio通訊過程情景模擬 1.學校 serversocketchannel 2.學校教務處 selector 3.老師 serversocket 4.學生 socketchannel 5.員工號 學生號 selectionkey 學校...
Mina tcp與NIO通訊問題
1.訊息解碼,編碼問題 開發中,我client用的是mina,服務端是 c 寫的nio,nio中更多是以byte形式來讀與寫.如果用mina與nio進行互動的話,nio可以解碼mina,但是mina卻死活接收不到來自nio的資訊。折騰了好久,最後才找到原因,很簡單。因為如果你用了mina封裝的編碼過...
2 1 NIO網路通訊
selector的應用 非阻塞nio的demo 基於serversocketchannel 非阻塞nio的demo 基於datagramchannel 前文 1.1 nio 和 bio 對比分析,引出 nio 介紹了他們的區別,該篇介紹 如何使用nio進行網路通訊.nio中,執行緒通常將非阻塞 io...