Java中的套接字編程:簡要指南
已發表: 2022-05-21在 Java 中,套接字編程是一種跨程序通信並保持連接到不同 JRE 的方法——面向連接的服務器和非面向連接的服務器。 Java 服務器套接字專門用於啟動和處理服務器和客戶端之間的通信。
該博客將涵蓋有關套接字編程的所有知識。
Java中的套接字編程
套接字編程是以交互方式補充和使用單獨的網絡節點的過程。 這是一種雙向通信系統,其中一個套接字(節點)偵聽 IP 地址的特定端口,而另一個套接字連接。
Java中的套接字
在 Java 中,套接字是連接兩個聯網程序的雙向通信通道的一端。 TCP 層用於為給定的 Java 套接字分配一個端口號,以識別我們正在向其傳輸數據的應用程序。 我們使用 IP 地址和端口號的組合來創建端點。
Java 平台包括一個名為 Socket 的類,它實現了 Java 應用程序和另一個程序之間雙向網絡連接的一側。 該類位於與平台無關的實現之上,使您的 Java 程序免受系統特定細節的影響。
通過使用類而不是特定的本地代碼,您的 Java 程序可以通過網絡以獨立於平台的方式進行通信。
此外,java.net 包括 ServerSocket 類,它實現了一個套接字,服務器可以使用該套接字來偵聽和接受來自客戶端的連接。 這是一個展示如何使用 ServerSocket 類和 Socket 的示例。
在客戶端端口和服務器端端口之間,創建了一個連接。
建立 Java 套接字連接 [客戶端]
在繼續客戶端編程之前,客戶端應該等待服務器的啟動。 一旦啟動並運行,它將開始向 Java 服務器發送查詢。 然後客戶端將等待服務器的響應。 這是對客戶端-服務器連接邏輯的一個很好的總結。
讓我們更詳細地研究客戶端編程。
要連接到另一台機器,您需要一個套接字連接。 兩台計算機必須知道它們在網絡上的位置(IP 地址)以及它們用來建立套接字連接的 TCP 端口。 java.net 框架表示套接字類。
服務器的 IP 地址是第一個輸入參數。 TCP 端口是這裡的下一個參數。 (它只不過是一個數字,表明應該在服務器上啟動哪個程序。)例如,HTTP 使用端口 80。通常,端口號的範圍是從 0 到 65535。
溝通
當通過套接字連接進行通信時,流用於數據輸入和輸出。 發送請求並建立強連接後,您必須關閉套接字連接。
關閉 Java 服務器套接字連接
向服務器發送消息後顯式關閉套接字連接,顯式關閉套接字連接。
// Clientele 的演示 Java 程序
導入java.net.*;
導入java.io.*;
公共類 Client_Side_Program
{
// 用於初始化套接字流、輸入流和輸出流
私有套接字套接字= null;
私有數據輸入流輸入=空;
私有數據輸出流輸出= null;
// 用於放置 TCP 端口和 IP 地址的構造函數
公共客戶端(字符串添加,int 端口)
{
//建立連接
嘗試
{
套接字 = 新套接字(添加,端口);
System.out.println(“已連接”);
// 從終端獲取輸入
輸入 = 新數據輸入流(System.in);
// 將輸出發送到套接字
out = new DataOutputStream(socket.getOutputStream());
}
捕獲(UnknownHostException u)
{
System.out.println(u);
}
捕獲(IOException 我)
{
System.out.println(i);
}
// 從輸入中讀取消息的字符串
字符串行=“”;
// 繼續閱讀直到輸入“Over”
while (!line.equals(“Over”))
{
嘗試
{
line = input.readLine();
out.writeUTF(line);
}
捕獲(IOException 我)
{
System.out.println(i);
}
}
//關閉連接
嘗試
{
輸入.close();
out.close();
socket.close();
}
捕獲(IOException 我)
{
System.out.println(i);
}
}
公共靜態無效主(字符串參數 [])
{
客戶端client = new Client(“127.0.0.1”, 5000);
}
}
要訪問此代碼的源代碼,請單擊此處。
建立 Java 套接字連接 [服務器端]
服務器創建其對象並等待客戶端的請求,同時考慮 Java 服務器套接字端連接。 發送請求後,服務器將與客戶端交互。 您需要兩個套接字來編寫服務器端應用程序,如下所示——當客戶端創建一個新的 Socket() 時,會創建一個 ServerSocket 來等待客戶端請求。 一個簡單的套接字可以定義為啟動與客戶端的服務器端通信的程序。 從 java 服務器端套接字連接獲取報告後,您可以相應地與客戶端通信響應。
溝通
要使用套接字發送輸出,我們一般期待使用 getOutputStream() 方法。
關閉 Java 服務器套接字連接
通過關閉套接字和輸入輸出流來完成連接至關重要。
// 一個服務器 java 程序
導入java.net.*;
導入java.io.*;
公共類服務器
{
//初始化socket和輸入流
私有套接字套接字 = null;
私有 ServerSocket服務器 = null;
私有數據輸入流 in = null;
// 帶端口的構造函數
公共服務器(int 端口)
{
// 啟動服務器後等待連接
嘗試
{
服務器 = 新服務器套接字(端口);
System.out.println(“服務器:已啟動”);
System.out.println(“等待客戶的到來……”);
套接字 = server.accept();
System.out.println(“客戶端已被接受”);
// 用於獲取客戶端套接字輸入
在 = 新數據輸入流(
新的 BufferedInputStream(socket.getInputStream()));
字符串行=“”;
// 用於從客戶端讀取消息,直到發送“結束”
while (!line.equals(“Over”))
{
嘗試
{
line = in.readUTF();
System.out.println(line);
}
捕獲(IOException 我)
{
System.out.println(i);
}
}
System.out.println("關閉連接");
//關閉連接
socket.close();
附寄();
}
捕獲(IOException 我)
{
System.out.println(i);
}
}
公共靜態無效主(字符串參數 [])
{
服務器服務器=新服務器(5000);
}
}
要查看此代碼的詳細信息,請單擊此處。
客戶端和服務器端都配置好後,可以先運行服務器端軟件。 然後,您必須執行客戶端軟件並發送請求。 當請求來自客戶端時,服務器將立即做出反應。
探索我們流行的軟件工程課程
SL。 不 | 軟件開發計劃 | |
1 | LJMU & IIITB 計算機科學碩士 | 加州理工學院 CTME 網絡安全證書課程 |
2 | 全棧開發訓練營 | 區塊鏈中的 PG 程序 |
3 | 軟件開發行政研究生課程 - DevOps 專業化 | 查看所有軟件工程課程 |
終端或命令提示符正在運行
要啟動終端或命令提示符,我們將使用以下命令。 首先,我們將創建兩個窗口,一個專用於服務器,另一個專用於客戶端。
- 讓服務器程序開始運行。
$java 服務器
- 然後,在另一個終端中,啟動客戶端應用程序,
java客戶端$
當服務器接受客戶端時,軟件將顯示“已連接”和“客戶端已接受”。
- 在客戶端框中,您可以開始輸入消息。 這是客戶端輸入的示例。
你好! 這標誌著我的第一個專業套接字連接。
服務器同時獲取和顯示的
你好! 這標誌著我的第一個專業套接字連接。
超過。
關閉連接
如前所述,發送“結束”結束客戶端和服務器之間的連接。
閱讀我們與軟件開發相關的熱門文章
如何在 Java 中實現數據抽象? | Java中的內部類是什麼? | Java 標識符:定義、語法和示例 |
通過示例了解 OOPS 中的封裝 | C 中的命令行參數解釋 | 2022 年雲計算的 10 大特點和特點 |
Java 中的多態性:概念、類型、特徵和示例 | Java 中的包以及如何使用它們? | Git 初學者教程:從零開始學習 Git |
結論
Java Socket 編程是一個必不可少的工具,它通過使用套接字 API 來建立本地和遠程客戶端-服務器應用程序之間的通信。 正確的套接字編程知識可以改善服務器和客戶端的來回連接。
如果您想學習 Java 並掌握全棧開發,我們為您準備了影響深遠的課程:upGrad 的軟件開發執行 PG 計劃 - 全棧開發專業化。
IIIT-B 為期 13 個月的課程旨在幫助學生掌握計算機科學基礎、軟件開發流程、後端 API 和交互式 Web UI 等技能。 您可以訪問面向非技術人員和新程序員的軟件職業轉型訓練營,以磨練他們的編程技能和 upGrad 提供的 360° 職業支持。
從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
學習Java socket編程有什麼好處?
從網絡的角度來看,套接字可用於構建客戶端-服務器應用程序,例如聊天。 套接字是在最基本的安全級別上實現的,以發現系統的端口是否打開、是否有標準的端口掃描程序(如 Nmap)以及它們是否可以在低級別使用。 它們的使用方式與 SSH 相同 - Secure Socket Shell 命令可用於通過反向 shell 連接到外部服務器。
接受函數有什麼作用?
接受函數通過阻止待在那裡直到參數到達來等待客戶端連接到服務器。 然後我們使用 getInputStream 函數從套接字獲取輸入。 服務器被設計成它繼續接受發送的消息,直到收到 Over 命令。
為什麼在網絡編程中使用線程?
我們希望多個客戶同時加入。 因此,我們必須在服務器端使用線程,以便不同的線程可以處理每個客戶端請求。 讓我們假設兩個請求同時到達服務器的情況。 由於在我們簡單的服務器-客戶端應用程序中沒有提供同時處理多個請求的方法,因此即使提前一納秒到達的請求也將能夠連接到服務器,而另一個請求將被拒絕。