首頁 >Java >java教程 >Java網路程式設計在伺服器端和客戶端之間如何通訊?

Java網路程式設計在伺服器端和客戶端之間如何通訊?

PHPz
PHPz原創
2024-04-15 13:06:011092瀏覽

在 Java 網路程式設計中,伺服器端和客戶端透過客戶端-伺服器模型進行通信,遵循以下步驟:建立伺服器端:使用 ServerSocket 監聽端口,等待客戶端連線。處理客戶端請求:接受連線並從客戶端讀取數據,處理請求並回傳回應,最後關閉客戶端套接字。建立客戶端:建立 Socket 連接,向伺服器端發送請求,讀取回應並關閉套接字。

Java網路程式設計在伺服器端和客戶端之間如何通訊?

Java 網路程式設計:伺服器端與用戶端通訊

在Java 網路程式設計中,伺服器端與用戶端之間的通訊遵循客戶端-伺服器模型。本文將深入探討伺服器端和客戶端如何透過套接字建立連線並交換資料。

建立伺服器端

伺服器端負責監聽客戶端連線並處理來自客戶端的請求。為了建立一個伺服器端,可以使用下列步驟:

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

public class Server {

    public static void main(String[] args) throws IOException {
        // 创建一个服务器套接字,监听端口 8080
        ServerSocket serverSocket = new ServerSocket(8080);

        // 循环等待客户端连接
        while (true) {
            // 接受客户端连接并返回一个套接字
            Socket clientSocket = serverSocket.accept();

            // 处理客户端请求
            handleClientRequest(clientSocket);

            // 关闭客户端套接字
            clientSocket.close();
        }

        // 关闭服务器套接字
        serverSocket.close();
    }

    public static void handleClientRequest(Socket clientSocket) throws IOException {
        // 从输入流读取客户端数据
        InputStream inputStream = clientSocket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String request = reader.readLine();

        // 处理请求并返回响应
        String response = processRequest(request);

        // 向输出流写入响应
        OutputStream outputStream = clientSocket.getOutputStream();
        PrintWriter writer = new PrintWriter(outputStream);
        writer.println(response);
    }
}

建立客戶端

客戶端負責連接到伺服器端並發送請求。以下步驟用於建立一個客戶端:

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

public class Client {

    public static void main(String[] args) throws IOException {
        // 创建一个客户端套接字并连接到服务器端(主机名:localhost,端口:8080)
        Socket clientSocket = new Socket("localhost", 8080);

        // 向服务器端发送请求
        OutputStream outputStream = clientSocket.getOutputStream();
        PrintWriter writer = new PrintWriter(outputStream);
        writer.println("Hello from client!");

        // 从服务器端读取响应
        InputStream inputStream = clientSocket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String response = reader.readLine();
        System.out.println("Response from server: " + response);

        // 关闭客户端套接字
        clientSocket.close();
    }
}

實戰案例

#以下是一個實戰案例,示範如何使用Java 網路程式設計在伺服器端和客戶端之間進行通訊:

伺服器端程式碼:

// Server.java
import java.net.*;
import java.io.*;

public class Server {

    public static void main(String[] args) throws IOException {
        // 监听端口 8080
        ServerSocket serverSocket = new ServerSocket(8080);

        // 等待客户端连接
        Socket clientSocket = serverSocket.accept();

        // 读取客户端数据
        BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String request = reader.readLine();
        System.out.println("Received request: " + request);

        // 响应客户端请求
        PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
        writer.println("Hello from server!");
        writer.flush();

        // 关闭套接字
        clientSocket.close();
        serverSocket.close();
    }
}

#客戶端程式碼:

// Client.java
import java.net.*;
import java.io.*;

public class Client {

    public static void main(String[] args) throws IOException {
        // 连接到服务器端(主机名:localhost,端口:8080)
        Socket clientSocket = new Socket("localhost", 8080);

        // 向服务器端发送数据
        PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
        writer.println("Hello from client!");
        writer.flush();

        // 读取服务器端响应
        BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String response = reader.readLine();
        System.out.println("Received response: " + response);

        // 关闭套接字
        clientSocket.close();
    }
}

執行此程式碼後,伺服器端將在連接埠8080 上監聽連接,而客戶端將連接到伺服器端並發送"Hello from client!"訊息。伺服器端將接收到該訊息並回應"Hello from server!"。

以上是Java網路程式設計在伺服器端和客戶端之間如何通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn