本篇文章主要介紹了java網路程式設計中的類別的方法以及實例,需要的朋友可以參考下
網路程式設計是指編寫運行在多個設備(電腦)的程序,這些設備都透過網路連接起來。
java.net套件中J2SE的API包含有類別和接口,它們提供低層次的通訊細節。你可以直接使用這些類別和接口,來專注於解決問題,而不用專注於通訊細節。
java.net套件中提供了兩種常見的網路協定的支援:
#TCP: TCP是傳輸控制協定的縮寫,它保障了兩個應用程式之間的可靠通訊。通常用於互聯網協議,被稱為TCP / IP。
UDP:UDP是用戶資料報協定的縮寫,一個無連線的協定。提供了應用程式之間要發送的資料的資料包。
本教學主要講解以下兩個主題。
Socket 程式設計: 這是使用最廣泛的網路概念,它已被解釋地非常詳細
URL 處理: 這部分會在另外的篇幅裡講,點擊這裡更詳細地了解在Java語言中的URL處理。
Socket 程式設計
套接字使用TCP提供了兩台電腦之間的通訊機制。 客戶端程式建立一個套接字,並嘗試連接伺服器的套接字。
當連線建立時,伺服器會建立一個Socket物件。客戶端和伺服器現在可以透過對Socket物件的寫入和讀取來進行通訊。
java.net.Socket類別代表一個套接字,並且java.net.ServerSocket類別為伺服器程式提供了一種來監聽客戶端,並與他們建立連接的機制。
以下步驟在兩台電腦之間使用套接字建立TCP連接時會出現:
伺服器實例化一個ServerSocket對象,表示透過伺服器上的端口通信。
伺服器呼叫 ServerSocket類別 的accept()方法,該方法將一直等待,直到客戶端連接到伺服器上給定的連接埠。
伺服器正在等待時,一個客戶端實例化一個Socket對象,指定伺服器名稱和連接埠號碼來請求連線。
Socket類別的建構子試圖將客戶端連接到指定的伺服器和連接埠號碼。如果通訊被建立,則在客戶端建立一個Socket物件能夠與伺服器進行通訊。
在伺服器端,accept()方法傳回伺服器上一個新的socket引用,該socket連接到客戶端的socket。
連線建立後,透過使用I/O流在進行通訊。每一個socket都有一個輸出流和一個輸入流。客戶端的輸出流連接到伺服器端的輸入流,而客戶端的輸入流連接到伺服器端的輸出流。
TCP是一個雙向的通訊協議,因此資料可以透過兩個資料流在同一時間發送。以下是一些類別提供的一套完整的有用的方法來實現sockets。
ServerSocket 類別的方法
伺服器應用程式透過使用java.net.ServerSocket類別以取得一個連接埠,並且偵聽客戶端請求。
ServerSocket類別有四個建構方法:
##序號 | 方法描述 |
public ServerSocket(int port) throws IOException建立綁定到特定連接埠的伺服器套接字 | |
public ServerSocket(int port, int backlog) throws IOException利用指定的backlog 建立伺服器套接字並將其綁定到指定的本機連接埠號碼 | |
public ServerSocket(int port, int backlog, InetAddress address) throws IOException使用指定的連接埠、偵聽backlog 和要綁定到的本機IP 位址建立伺服器 | |
public ServerSocket() throws IOException建立非綁定伺服器套接字 |
#序號 | 方法描述 |
1 |
# public int getLocalPort() 傳回此套接字在其上偵聽的連接埠 |
2 |
public Socket accept() throws IOException #偵聽並接受到此套接字的連接 |
3 |
public void setSoTimeout(int timeout) 透過指定逾時值啟用/禁用SO_TIMEOUT,以毫秒為單位 |
4 |
public void bind(SocketAddress host, int backlog) public void bind(SocketAddress host, int backlog) | 將ServerSocket 綁定到特定位址(IP 位址和連接埠號碼)
Socket 類別的方法
Socket類別有五個建構方法.
序號 | 方法描述 |
1
public Socket(String host, int port) throws UnknownHostException, IOException. | 建立一個串流套接字並將其連接到指定主機上的指定連接埠號碼|
#2
public Socket( InetAddress host, int port) throws IOException | 建立一個流套接字並將其連接到指定IP 位址的指定連接埠號碼|
3
public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException. | 建立一個套接字並將其連接到指定遠端主機上的指定遠端連接埠|
4
public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException | 建立一個套接字並將其連接到指定遠端位址上的指定遠端連接埠|
#5
public Socket() | 透過系統預設類型的SocketImpl 建立未連接套接字
當Socket構造方法返回,並沒有簡單的實例化了一個Socket對象,它實際上會嘗試連接到指定的伺服器和連接埠。
下面列出了一些感興趣的方法,注意客戶端和伺服器端都有一個Socket對象,所以無論客戶端還是服務端都能夠呼叫這些方法。
序號 | # 方法描述 |
## 方法描述 | |
public void connect(SocketAddress host, int timeout) throws IOException |
將此套接字連接到伺服器,並指定一個逾時值 |
public InetAddress getInetAddress() |
傳回套接字連接的位址 |
public int getPort() |
傳回此套接字連接到的遠端連接埠 | ##4
public int getLocalPort() | 傳回此套接字綁定到的本機連接埠
|
傳回此套接字連接的端點的位址,如果未連線則傳回null | # 6 |
public InputStream getInputStream() throws IOException | 傳回此套接字的輸入流 | 7
public OutputStream getOutputStream() throws IOException | #傳回此套接字的輸出流 | 8
關閉此套接字
這個類別表示網際網路協定(IP)位址。以下列出了Socket程式設計時比較有用的方法: | |
#方法描述
1 |
|
InetAddress getByAddress(byte[] addr) | 在給定原始IP 位址的情況下,傳回InetAddress 物件 | 2
static InetAddress getByAddress(String host, byte[] addr) | #根據提供的主機名稱和IP 位址建立InetAddress |
在給定主機名稱的情況下確定主機的IP 位址 | |
字串 | (以文字表現)5 |
#取得此IP 位址的主機名稱 |
6 |
回傳本機 | 7 |
Socket 客戶端實例
如下的GreetingClient 是一個客戶端程序,該程序透過socket連接到伺服器並發送一個請求,然後等待一個回應。
// 文件名 GreetingClient.java import java.net.*; import java.io.*; public class GreetingClient { public static void main(String [] args) { String serverName = args[0]; int port = Integer.parseInt(args[1]); try { System.out.println("Connecting to " + serverName + " on port " + port); Socket client = new Socket(serverName, port); System.out.println("Just connected to " + client.getRemoteSocketAddress()); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("Server says " + in.readUTF()); client.close(); }catch(IOException e) { e.printStackTrace(); } } }
Socket 服務端實例
如下的GreetingServer 程式是一個伺服器端應用程序,使用Socket來監聽一個指定的連接埠。
// 文件名 GreetingServer.java import java.net.*; import java.io.*; public class GreetingServer extends Thread { private ServerSocket serverSocket; public GreetingServer(int port) throws IOException { serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000); } public void run() { while(true) { try { System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "..."); Socket server = serverSocket.accept(); System.out.println("Just connected to " + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!"); server.close(); }catch(SocketTimeoutException s) { System.out.println("Socket timed out!"); break; }catch(IOException e) { e.printStackTrace(); break; } } } public static void main(String [] args) { int port = Integer.parseInt(args[0]); try { Thread t = new GreetingServer(port); t.start(); }catch(IOException e) { e.printStackTrace(); } } }
編譯以上java 程式碼,並執行以下指令來啟動服務,使用連接埠號碼為6066:
$ java GreetingServer 6066 Waiting for client on port 6066...
像下面一樣開啟客戶端:
$ java GreetingClient localhost 6066 Connecting to localhost on port 6066 Just connected to localhost/127.0.0.1:6066 Server says Thank you for connecting to /127.0.0.1:6066 Goodbye!
【相關推薦】
#以上是關於網路程式設計socket的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文解釋了用於構建分佈式應用程序的Java的遠程方法調用(RMI)。 它詳細介紹了接口定義,實現,註冊表設置和客戶端調用,以解決網絡問題和安全性等挑戰。

本文詳細介紹了用於網絡通信的Java的套接字API,涵蓋了客戶服務器設置,數據處理和關鍵考慮因素,例如資源管理,錯誤處理和安全性。 它還探索了性能優化技術,我

本文詳細介紹了創建自定義Java網絡協議。 它涵蓋協議定義(數據結構,框架,錯誤處理,版本控制),實現(使用插座),數據序列化和最佳實踐(效率,安全性,維護


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用