1、創建socket,這樣的構造函數有很多,但常用的就是創建一個無參的構造的實例,這樣可以連接server之前進行一些設置;而帶參的有好幾個都是實例化同時就connect了,所以用無參;接下來創建無參然后bind,如果不板頂端口,客戶端會隨機分配一個端口
用bind:可以設置一個連接超時時間
2、 接下來初始化設置socket
socket.setSOtimeout()是設置socket阻塞時間:connect()or accept() 方法有連接阻塞超時時間設置了,所以這里就是read阻塞超時時間設置,超時異常叫做socketTimeoutException ,服務端都有這個超時異常設置
下面在執行
String echo = socketBufferedReader.readLine();
代碼超時,這個代碼是客戶端read取服務端返回的響應數據,由於遲遲沒有得到服務端響應就超時了。
下面的這個異常是端口被占用,或者serverSocket未啟動服務或 server端ipping不通 --------這個不是超時時間的設置,這個超時時間在connect方法的參數設置。
下面是偵聽客戶端請求連接超時
socket.setReuseAddress() socket連接遠程,連接關閉之后一般是在2分鍾內不准再次使用端口,這個設置就可以直接使用了
socket.setSoLinger 如果是false,socket關閉后,會將緩沖區數據輸出,而true,直接拋棄緩沖區數據
3、服務端設置:
這個backlog是等待最大連接數,bind操作后就已經啟動serverSocket,接下來serverSocket要創建一個個socket分配各個連接到客戶端。如果這時有50個客戶端等待連接serverSocket,是可以的,如果51個,那么51個客戶端就報異常。
先創建一個空的serverSocket,然后設置,再bind,因為bind后就啟動了,這時再設置就無效了,所以bind不能放在createServetSocket中
ServerSocket serverSocket = createServerSocket();
initServerSocket(serverSocket);
serverSocket.bind(new InetSocketAddress(port),50);