更新時(shí)間:2022-06-06 10:36:51 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1598次
Java Socket 編程用于在不同 JRE 上運(yùn)行的應(yīng)用程序之間進(jìn)行通信。
Java Socket 編程可以是面向連接的或無(wú)連接的。
Socket 和 ServerSocket 類用于面向連接的套接字編程,DatagramSocket 和 DatagramPacket 類用于無(wú)連接的套接字編程。
套接字編程中的客戶端必須知道兩個(gè)信息:
1.服務(wù)器的 IP 地址,以及
2.端口號(hào)。
在這里,我們將進(jìn)行單向的客戶端和服務(wù)器通信。在此應(yīng)用程序中,客戶端向服務(wù)器發(fā)送消息,服務(wù)器讀取消息并打印。這里使用了兩個(gè)類:Socket 和 ServerSocket。Socket 類用于客戶端和服務(wù)器之間的通信。通過(guò)這個(gè)類,我們可以讀寫消息。ServerSocket 類用于服務(wù)器端。ServerSocket 類的 accept() 方法會(huì)阻塞控制臺(tái),直到客戶端連接。客戶端連接成功后,返回服務(wù)端的Socket實(shí)例。
套接字只是機(jī)器之間通信的端點(diǎn)。Socket 類可用于創(chuàng)建套接字。
重要方法
方法 | 描述 |
---|---|
公共輸入流 getInputStream() | 返回與此套接字連接的 InputStream。 |
公共輸出流 getOutputStream() | 返回與此套接字連接的 OutputStream。 |
公共同步無(wú)效關(guān)閉() | 關(guān)閉此套接字 |
ServerSocket 類可用于創(chuàng)建服務(wù)器套接字。該對(duì)象用于建立與客戶端的通信。
重要方法
方法 | 描述 |
---|---|
公共套接字接受() | 返回套接字并在服務(wù)器和客戶端之間建立連接。 |
公共同步無(wú)效關(guān)閉() | 關(guān)閉服務(wù)器套接字。 |
創(chuàng)建服務(wù)器:
要?jiǎng)?chuàng)建服務(wù)器應(yīng)用程序,我們需要?jiǎng)?chuàng)建 ServerSocket 類的實(shí)例。在這里,我們使用 6666 端口號(hào)進(jìn)行客戶端和服務(wù)器之間的通信。您也可以選擇任何其他端口號(hào)。accept() 方法等待客戶端。如果客戶端使用給定的端口號(hào)連接,它會(huì)返回一個(gè) Socket 實(shí)例。
ServerSocket ss=新的 ServerSocket(6666 );
套接字 s=ss.accept(); //建立連接并等待客戶端
創(chuàng)建客戶端:
要?jiǎng)?chuàng)建客戶端應(yīng)用程序,我們需要?jiǎng)?chuàng)建 Socket 類的實(shí)例。在這里,我們需要傳遞服務(wù)器的 IP 地址或主機(jī)名以及端口號(hào)。在這里,我們使用“localhost”,因?yàn)槲覀兊姆?wù)器在同一系統(tǒng)上運(yùn)行。
套接字 s=新 套接字(“本地主機(jī)” ,6666 );
讓我們看一個(gè)簡(jiǎn)單的 Java 套接字編程,其中客戶端發(fā)送文本,服務(wù)器接收并打印它。
文件:MyServer.java
導(dǎo)入 java.io.*;
導(dǎo)入 java.net.*;
公共類 MyServer {
公共靜態(tài)無(wú)效 主要(字符串[]參數(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)無(wú)效 主要(字符串[]參數(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( "客戶說(shuō):" +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ù)器說(shuō):" +str2);
}
dout.close();
s.close();
}}
以上就是關(guān)于“Java socket編程詳解”的介紹,大家如果想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容由淺到深,通俗易懂,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)