Java里socket通信怎樣實(shí)現(xiàn)

小樊
81
2024-09-30 00:55:19
欄目: 編程語言

在Java中,使用Socket進(jìn)行通信主要涉及到兩個(gè)類:java.net.Socket(用于客戶端)和java.net.ServerSocket(用于服務(wù)器端)。下面是一個(gè)簡單的示例,展示了如何使用這兩個(gè)類實(shí)現(xiàn)基本的TCP通信。

1. 服務(wù)器端

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建一個(gè)ServerSocket對(duì)象,監(jiān)聽指定端口
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("Server is listening on port 8888...");

        // 接受來自客戶端的連接
        Socket socket = serverSocket.accept();
        System.out.println("Client connected.");

        // 獲取輸入輸出流
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();

        // 讀取客戶端發(fā)送的數(shù)據(jù)
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String message = reader.readLine();
        System.out.println("Received from client: " + message);

        // 向客戶端發(fā)送數(shù)據(jù)
        PrintWriter writer = new PrintWriter(outputStream, true);
        writer.println("Hello from server!");

        // 關(guān)閉資源
        reader.close();
        writer.close();
        socket.close();
        serverSocket.close();
    }
}

2. 客戶端

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        // 創(chuàng)建一個(gè)Socket對(duì)象,連接到服務(wù)器的IP地址和端口
        Socket socket = new Socket("localhost", 8888);
        System.out.println("Connected to server.");

        // 獲取輸入輸出流
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();

        // 向服務(wù)器發(fā)送數(shù)據(jù)
        PrintWriter writer = new PrintWriter(outputStream, true);
        writer.println("Hello from client!");

        // 讀取服務(wù)器發(fā)送的數(shù)據(jù)
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String message = reader.readLine();
        System.out.println("Received from server: " + message);

        // 關(guān)閉資源
        reader.close();
        writer.close();
        socket.close();
    }
}

在這個(gè)示例中,服務(wù)器監(jiān)聽8888端口,并在接受到客戶端連接后,通過輸入輸出流與客戶端進(jìn)行通信??蛻舳诉B接到服務(wù)器的IP地址和端口,然后通過輸入輸出流與服務(wù)器進(jìn)行通信。

注意:在實(shí)際應(yīng)用中,你可能需要處理更多的異常情況,例如連接超時(shí)、網(wǎng)絡(luò)中斷等。此外,為了提高程序的健壯性,你還可以考慮使用多線程來處理多個(gè)客戶端的連接。

0