Java Socket 編程是一個常見的網絡編程技術,它允許程序員在不同計算機之間建立網絡通信連接。在本指南中,我們將深入介紹 Java Socket 編程及其基本組成部分,以及如何使用 Socket 完成網絡通信。
一、Socket 概述
Java Socket 是網絡編程中最基本的部分。Socket 類封裝了一個套接字,它是一個 IP 地址和端口號的組合。通過 Socket,我們可以在不同的計算機之間建立連接通信。Socket 以 TCP 或 UDP 協議傳輸數據,它提供了一種簡單而又強大的客戶端/服務器編程方法。
二、Socket 創建
Java Socket 類有兩種構造函數,它們各自用於創建不同類型的套接字。
- 創建 TCP Socket:
Socket socket = new Socket(String host, int port);
- 創建 UDP Socket:
DatagramSocket socket = new DatagramSocket(int port);
三、TCP Socket 通信
TCP 協議提供可靠的面向連接的服務,它使用三次握手建立連接,保證了數據的可靠傳輸。在 TCP Socket 通信中,客戶端首先向服務器發起連接請求,服務器接受請求並返回確認信息,之後客戶端和服務器之間可以進行數據的傳輸。
下面是一個使用 TCP Socket 客戶端和服務器的示例代碼:
服務器端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept(); // 監聽客戶端連接
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
byte[] data = new byte[1024];
int len = in.read(data);
String request = new String(data, 0, len);
System.out.println("接收到客戶端請求:" + request);
String response = "歡迎使用 Socket 編程!";
out.write(response.getBytes());
in.close();
out.close();
socket.close();
}
}
客戶端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 8888);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
String request = "Socket 編程示例";
out.write(request.getBytes());
byte[] data = new byte[1024];
int len = in.read(data);
String response = new String(data, 0, len);
System.out.println("接收到服務器響應:" + response);
in.close();
out.close();
socket.close();
}
}
四、UDP Socket 通信
UDP 協議提供不可靠的無連接服務,它沒有建立連接的過程,並不保證數據傳輸的可靠性。在 UDP Socket 通信中,客戶端和服務器之間通過數據報進行通信。
下面是一個使用 UDP Socket 的示例代碼:
服務器端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws IOException {
DatagramSocket server = new DatagramSocket(8888);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
server.receive(packet);
String request = new String(packet.getData(), 0, packet.getLength());
System.out.println("接收到客戶端請求:" + request);
String response = "歡迎使用 Socket 編程!";
DatagramPacket outPacket = new DatagramPacket(response.getBytes(), response.getBytes().length, packet.getAddress(), packet.getPort());
server.send(outPacket);
server.close();
}
}
客戶端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket();
String request = "Socket 編程示例";
DatagramPacket outPacket = new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName("127.0.0.1"), 8888);
client.send(outPacket);
byte[] data = new byte[1024];
DatagramPacket inPacket = new DatagramPacket(data, data.length);
client.receive(inPacket);
String response = new String(inPacket.getData(), 0, inPacket.getLength());
System.out.println("接收到服務器響應:" + response);
client.close();
}
}
五、總結
本文介紹了 Java Socket 編程的基本概念、創建、TCP Socket 和 UDP Socket 通信。高效的 Socket 編程可以用於實現各種網絡應用程序,例如:Web 服務器、聊天程序、文件傳輸程序等。學好 Socket 編程,對於高效的網絡編程至關重要。
原創文章,作者:THTR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138963.html