更新時間:2022-06-06 10:36:51 來源:動力節點 瀏覽1509次
Java Socket 編程用于在不同 JRE 上運行的應用程序之間進行通信。
Java Socket 編程可以是面向連接的或無連接的。
Socket 和 ServerSocket 類用于面向連接的套接字編程,DatagramSocket 和 DatagramPacket 類用于無連接的套接字編程。
套接字編程中的客戶端必須知道兩個信息:
1.服務器的 IP 地址,以及
2.端口號。
在這里,我們將進行單向的客戶端和服務器通信。在此應用程序中,客戶端向服務器發送消息,服務器讀取消息并打印。這里使用了兩個類:Socket 和 ServerSocket。Socket 類用于客戶端和服務器之間的通信。通過這個類,我們可以讀寫消息。ServerSocket 類用于服務器端。ServerSocket 類的 accept() 方法會阻塞控制臺,直到客戶端連接。客戶端連接成功后,返回服務端的Socket實例。
套接字只是機器之間通信的端點。Socket 類可用于創建套接字。
重要方法
方法 | 描述 |
---|---|
公共輸入流 getInputStream() | 返回與此套接字連接的 InputStream。 |
公共輸出流 getOutputStream() | 返回與此套接字連接的 OutputStream。 |
公共同步無效關閉() | 關閉此套接字 |
ServerSocket 類可用于創建服務器套接字。該對象用于建立與客戶端的通信。
重要方法
方法 | 描述 |
---|---|
公共套接字接受() | 返回套接字并在服務器和客戶端之間建立連接。 |
公共同步無效關閉() | 關閉服務器套接字。 |
創建服務器:
要創建服務器應用程序,我們需要創建 ServerSocket 類的實例。在這里,我們使用 6666 端口號進行客戶端和服務器之間的通信。您也可以選擇任何其他端口號。accept() 方法等待客戶端。如果客戶端使用給定的端口號連接,它會返回一個 Socket 實例。
ServerSocket ss=新的 ServerSocket(6666 );
套接字 s=ss.accept(); //建立連接并等待客戶端
創建客戶端:
要創建客戶端應用程序,我們需要創建 Socket 類的實例。在這里,我們需要傳遞服務器的 IP 地址或主機名以及端口號。在這里,我們使用“localhost”,因為我們的服務器在同一系統上運行。
套接字 s=新 套接字(“本地主機” ,6666 );
讓我們看一個簡單的 Java 套接字編程,其中客戶端發送文本,服務器接收并打印它。
文件:MyServer.java
導入 java.io.*;
導入 java.net.*;
公共類 MyServer {
公共靜態無效 主要(字符串[]參數){
試試{
ServerSocket ss=新的 ServerSocket(6666 );
套接字 s=ss.accept(); //建立連接
DataInputStream dis= new DataInputStream(s.getInputStream());
字符串 str=(String)dis.readUTF();
System.out.println( "message=" +str);
ss.close();
}捕捉(異常 e){System.out.println(e);}
}
}
文件:MyClient.java
導入 java.io.*;
導入 java.net.*;
公共類 MyClient {
公共靜態無效 主要(字符串[]參數){
試試{
套接字 s=新 套接字(“本地主機” ,6666 );
DataOutputStream dout= new DataOutputStream(s.getOutputStream());
dout.writeUTF( "你好服務器" );
dout.flush();
dout.close();
s.close();
}捕捉(異常 e){System.out.println(e);}
}
}
在此示例中,客戶端將首先寫入服務器,然后服務器將接收并打印文本。然后服務器將寫入客戶端,客戶端將接收并打印文本。步驟繼續。
文件:MyServer.java
導入 java.net.*;
導入 java.io.*;
類我的 服務器{
公共靜態void main(String args[])拋出 異常{
ServerSocket ss=新的 ServerSocket(3333 );
套接字 s=ss.accept();
DataInputStream din= new DataInputStream(s.getInputStream());
DataOutputStream dout= new DataOutputStream(s.getOutputStream());
BufferedReader br= new BufferedReader( new InputStreamReader(System.in));
字符串 str= "" ,str2= "" ;
而(!str.equals(“停止” )){
str=din.readUTF();
System.out.println( "客戶說:" +str);
str2=br.readLine();
dout.writeUTF(str2);
dout.flush();
}
din.close();
s.close();
ss.close();
}}
文件:MyClient.java
導入 java.net.*;
導入 java.io.*;
類我的 客戶{
公共靜態void main(String args[])拋出 異常{
套接字 s=新 套接字(“本地主機” ,3333 );
DataInputStream din= new DataInputStream(s.getInputStream());
DataOutputStream dout= new DataOutputStream(s.getOutputStream());
BufferedReader br= new BufferedReader( new InputStreamReader(System.in));
字符串 str= "" ,str2= "" ;
而(!str.equals(“停止” )){
str=br.readLine();
dout.writeUTF(str);
dout.flush();
str2=din.readUTF();
System.out.println( "服務器說:" +str2);
}
dout.close();
s.close();
}}
以上就是關于“Java socket編程詳解”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java視頻教程,里面的課程內容由淺到深,通俗易懂,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助哦。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習