傳統的 網路程式設計
tcp serversocket socket (阻塞式)
udp datagramsocket datagrampacket
serversocketchannel是乙個基於通道的socket***,等同於serversocket類。socketchannel是乙個基於通道的客戶端套接字,等同於socket類。
public
static
void
main
(string[
] args)
throws ioexception
public
static
void
main
(string[
] args)
throws ioexception
要使用selector,得向selector註冊channel,然後呼叫它的select()方法。這個方法會一直阻塞到某個註冊的通道有事件就緒。一旦這個方法返回,執行緒就可以處理這些事件,事件的例子有如新連線進來,資料接收等。
選擇器提供選擇執行已經就緒的任務的能力.從底層來看,selector提供了詢問通道是否已經準備好執行每個i/o操作的能力。selector 允許單執行緒處理多個channel。僅用單個執行緒來處理多個channels的好處是,只需要更少的執行緒來處理通道。事實上,可以只用乙個執行緒處理所有的通道,這樣會大量的減少執行緒之間上下文切換的開銷。
服務端
public
static
void
main
(string[
] args)
throws ioexception
else
if(selectionkey.
isreadable()
)if(len==-1
) socketchannel.
close()
;}iterator.
remove()
;}}}
客戶端
public
static
void
main
(string[
] args)
throws ioexception
sc.close()
;}
阻塞和非阻塞
在 windows 下的 socket 程式設計有兩個程式設計模型,阻塞和非阻塞。有時,他們也被叫做同步 阻 塞 和非同步 非阻塞 在 unix 中只支援阻塞模型。阻塞 indy 使用阻塞 socket 呼叫。阻塞呼叫很像乙個檔案的讀寫。當你讀資料或者寫資料時,直 到操作完成,函式才會返回。不同的是...
阻塞和非阻塞
在 windows 下的 socket 程式設計有兩個程式設計模型,阻塞和非阻塞。有時,他們也被叫做同步 阻 塞 和非同步 非阻塞 在 unix 中只支援阻塞模型。阻塞 indy 使用阻塞 socket 呼叫。阻塞呼叫很像乙個檔案的讀寫。當你讀資料或者寫資料時,直 到操作完成,函式才會返回。不同的是...
linux網路程式設計中阻塞和非阻塞socket的區別
阻塞socket和非阻塞socket 讀操作 對於阻塞的socket,當socket的接收緩衝區中沒有資料時,read呼叫會一直阻塞住,直到有資料到來才返 回。當socket緩衝區中的資料量小於期望讀取的資料量時,返回實際讀取的位元組數。當sockt的接收緩衝 區中的資料大於期望讀取的位元組數時,讀...