古詩詞大全網 - 團隊口號 - java 中的socket 是不是從哪個端口發出客戶端請求就從這個端口接收數據

java 中的socket 是不是從哪個端口發出客戶端請求就從這個端口接收數據

壹、建立服務器類

Java中有壹個專門用來建立Socket服務器的類,名叫ServerSocket,可以用服務器需要使用的端口號作為參數來創建服務器對象。

ServerSocket server = new ServerSocket(9998)

這條語句創建了壹個服務器對象,這個服務器使用9998號端口即在端口9998上註冊服務,這裏稍微要註意的是端口的分配必須是唯壹的。因為端口是為了唯壹標識每臺計算機唯壹服務的,另外端口號是從0~65535之間的,前1024個端口已經被Tcp/Ip 作為保留端口,因此妳所分配的端口只能是1024個之後的。當壹個客戶端程序建立壹個Socket連接,所連接的端口號為9998時,服務器對象server便響應這個連接,並且server.accept()方法會創建壹個Socket對象。服務器端便可以利用這個Socket對象與客戶進行通訊。

Socket incoming = server.accept() ; // 監聽窗口,等待連接

進而得到輸入流和輸出流,並進行封裝

BufferedReader in = new BufferedReader(new

InputStreamReader(incoming.getInputStream()));

/*

當讀取文件時,先把內容讀到緩存中,當調用in.readLine()時,再從緩存中以字符的方式讀取數據(以下簡稱“緩存字節讀取方式”)。

*/

PrintWriter ut = new PrintWriter(incoming.getOutputStream(),true);

隨後,就可以使用in.readLine()方法得到客戶端的輸入,也可以使用out.println()方法向客戶端發送數據。從而可以根據程序的需要對客戶端的不同請求進行回應。

在所有通訊結束以後應該關閉這兩個數據流,關閉的順序是先關閉輸出流,再關閉輸入流,即使用

out.close();

in.close();

二、建立客戶端代碼

相比服務器端,客戶端要簡單壹些,客戶端只需用服務器所在機器的ip以及服務器的端口作為參數創建壹個Socket對象。得到這個對象後,就可以用"建立服務器"部分介紹的方法實現數據的輸入和輸出。

Socket socket = new Socket("168.160.12.42",9998);

或:

Socket socket = new Socket(InetAddress.getLocalHost(),5678); // 向主機名為InetAddress.getLocalHost()的服務器申請連接

客戶機必須知道有關服務器的IP地址,對於著壹點Java也提供了壹個相關的類InetAddress 該對象的實例必須通過它的靜態方法來提供,它的靜態方法主要提供了得到本機IP 和通過名字或IP直接得到InetAddress的方法。

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(),true);

以上的程序代碼建立了壹個Socket對象,這個對象連接到ip地址為168.160.12.42的主機上、端口為9998的服務器對象。並且建立了輸入流和輸出流,分別對應服務器的輸出和客戶端的寫入。