NIO通訊示例

2021-09-26 14:36:00 字數 2649 閱讀 1679

讀者可以將**拷貝到編譯器上跑一跑,如果看了注釋還有不懂的地方,可以參考:

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...