Socket機制用到的類有
ServerSocket
Socket等
服務器端以監聽端口號和接受隊列長度為參數實例化ServerSocket類
缺省的隊列長度是
以accept()方法接收客戶的連接
客戶端則直接以服務器的地址和監聽端口為參數實例化Socket類
連接服務器
缺省的連接方式是stream socket(區別於datagram socket)
服務器端和客戶端調用getInputStream()和getOutputStream()方法得到輸入/輸出流
如果以ObjectInputStream和ObjectOutputStream包裝Socket的輸入/輸出流
要注意一點
ObjectOutputStream類實例化時要向底層流寫入一個標識碼
ObjectInputStream類相應的讀入該標識碼
如果實例化的次序不當會引起死鎖
建議客戶服務器兩端都先實例化ObjectOutputStream
因為調用ServerSocket類的accept()方法和Socket輸入流的read()方法時會引起線程阻塞
所以應該用setSoTimeout()方法設置超時
缺省的設置是
即超時永遠不會發生
超時的判斷是累計式的
一次設置後
每次調用引起的阻塞時間都從該值中扣除
直至另一次超時設置或有超時異常拋出
比如
某種服務需要三次調用read()
超時設置為
分鐘
那麼如果某次服務三次read()調用的總時間超過
分鐘就會有異常拋出
如果要在同一個Socket上反復進行這種服務
就要在每次服務之前設置一次超時
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27095.html