更新時間:2022-06-06 10:36:51 來源:動力節(jié)點(diǎn) 瀏覽1922次
Java Socket 編程用于在不同 JRE 上運(yùn)行的應(yīng)用程序之間進(jìn)行通信。
Java Socket 編程可以是面向連接的或無連接的。
Socket 和 ServerSocket 類用于面向連接的套接字編程,DatagramSocket 和 DatagramPacket 類用于無連接的套接字編程。
套接字編程中的客戶端必須知道兩個信息:
1.服務(wù)器的 IP 地址,以及
2.端口號。
在這里,我們將進(jìn)行單向的客戶端和服務(wù)器通信。在此應(yīng)用程序中,客戶端向服務(wù)器發(fā)送消息,服務(wù)器讀取消息并打印。這里使用了兩個類:Socket 和 ServerSocket。Socket 類用于客戶端和服務(wù)器之間的通信。通過這個類,我們可以讀寫消息。ServerSocket 類用于服務(wù)器端。ServerSocket 類的 accept() 方法會阻塞控制臺,直到客戶端連接??蛻舳诉B接成功后,返回服務(wù)端的Socket實(shí)例。

套接字只是機(jī)器之間通信的端點(diǎn)。Socket 類可用于創(chuàng)建套接字。
重要方法
| 方法 | 描述 |
|---|---|
| 公共輸入流 getInputStream() | 返回與此套接字連接的 InputStream。 |
| 公共輸出流 getOutputStream() | 返回與此套接字連接的 OutputStream。 |
| 公共同步無效關(guān)閉() | 關(guān)閉此套接字 |
ServerSocket 類可用于創(chuàng)建服務(wù)器套接字。該對象用于建立與客戶端的通信。
重要方法
| 方法 | 描述 |
|---|---|
| 公共套接字接受() | 返回套接字并在服務(wù)器和客戶端之間建立連接。 |
| 公共同步無效關(guān)閉() | 關(guān)閉服務(wù)器套接字。 |
創(chuàng)建服務(wù)器:
要創(chuàng)建服務(wù)器應(yīng)用程序,我們需要創(chuàng)建 ServerSocket 類的實(shí)例。在這里,我們使用 6666 端口號進(jìn)行客戶端和服務(wù)器之間的通信。您也可以選擇任何其他端口號。accept() 方法等待客戶端。如果客戶端使用給定的端口號連接,它會返回一個 Socket 實(shí)例。
ServerSocket ss=新的 ServerSocket(6666 );
套接字 s=ss.accept(); //建立連接并等待客戶端
創(chuàng)建客戶端:
要創(chuàng)建客戶端應(yīng)用程序,我們需要創(chuàng)建 Socket 類的實(shí)例。在這里,我們需要傳遞服務(wù)器的 IP 地址或主機(jī)名以及端口號。在這里,我們使用“localhost”,因?yàn)槲覀兊姆?wù)器在同一系統(tǒng)上運(yùn)行。
套接字 s=新 套接字(“本地主機(jī)” ,6666 );
讓我們看一個簡單的 Java 套接字編程,其中客戶端發(fā)送文本,服務(wù)器接收并打印它。
文件:MyServer.java
導(dǎo)入 java.io.*;
導(dǎo)入 java.net.*;
公共類 MyServer {
公共靜態(tài)無效 主要(字符串[]參數(shù)){
試試{
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
導(dǎo)入 java.io.*;
導(dǎo)入 java.net.*;
公共類 MyClient {
公共靜態(tài)無效 主要(字符串[]參數(shù)){
試試{
套接字 s=新 套接字(“本地主機(jī)” ,6666 );
DataOutputStream dout= new DataOutputStream(s.getOutputStream());
dout.writeUTF( "你好服務(wù)器" );
dout.flush();
dout.close();
s.close();
}捕捉(異常 e){System.out.println(e);}
}
}
在此示例中,客戶端將首先寫入服務(wù)器,然后服務(wù)器將接收并打印文本。然后服務(wù)器將寫入客戶端,客戶端將接收并打印文本。步驟繼續(xù)。
文件:MyServer.java
導(dǎo)入 java.net.*;
導(dǎo)入 java.io.*;
類我的 服務(wù)器{
公共靜態(tài)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
導(dǎo)入 java.net.*;
導(dǎo)入 java.io.*;
類我的 客戶{
公共靜態(tài)void main(String args[])拋出 異常{
套接字 s=新 套接字(“本地主機(jī)” ,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( "服務(wù)器說:" +str2);
}
dout.close();
s.close();
}}
以上就是關(guān)于“Java socket編程詳解”的介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助哦。
相關(guān)閱讀

初級 202925

初級 203221

初級 202629

初級 203743