Java 네트워크 프로그래밍의 다중 스레드 통신을 사용하면 여러 클라이언트 또는 서버가 동일한 애플리케이션에 동시에 연결할 수 있어 효율성이 향상되고 요청에 응답할 수 있습니다. 다중 스레드 통신을 구현하려면 들어오는 연결을 수신하기 위한 ServerSocket 개체를 생성하고 응답 수신 및 전송과 같은 데이터를 처리하기 위해 각 연결에 대해 별도의 스레드를 생성하여 ServerSocket 및 Socket 클래스를 사용해야 합니다. 예를 들어, 실제 경우 에코 서버는 수신한 메시지를 클라이언트에 그대로 반환하여 네트워크 프로그래밍에서 멀티스레드 통신의 적용을 보여줍니다.
Java 네트워크 프로그래밍의 다중 스레드 통신
Java 네트워크 프로그래밍에서 다중 스레드 통신을 사용하면 여러 클라이언트 또는 서버가 동일한 응용 프로그램에 동시에 연결할 수 있으므로 효율성이 향상되고 더 많은 요청에 응답할 수 있습니다.
멀티 스레드 통신 구현
멀티 스레드 통신을 구현하려면 ServerSocket
및 Socket
클래스를 사용할 수 있습니다. ServerSocket
和 Socket
类:
创建一个 ServerSocket
对象以监听传入的连接:
ServerSocket serverSocket = new ServerSocket(port);
创建一个单独的线程来处理每个传入的连接:
while (true) { Socket socket = serverSocket.accept(); Runnable task = new ClientHandler(socket); // ClientHandler 为处理连接的自定义类 new Thread(task).start(); }
在 ClientHandler
ServerSocket
객체: class ClientHandler implements Runnable { private Socket socket; public ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { // 从套接字接收数据 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String request = in.readLine(); // 准备并发送响应 String response = "HTTP/1.1 200 OK\n"; socket.getOutputStream().write(response.getBytes()); // 关闭套接字 socket.close(); } }
각 들어오는 연결을 처리하기 위한 별도의 스레드 만들기: import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) throws Exception {
// 监听端口 8080 的传入连接
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
// 接受传入的连接
Socket socket = serverSocket.accept();
// 处理连接的线程
Runnable task = new ClientHandler(socket);
new Thread(task).start();
}
}
private static class ClientHandler implements Runnable {
private Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 从客户端接收消息
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = in.readLine();
// 将消息原样返回给客户端
socket.getOutputStream().write((message + "\n").getBytes());
// 关闭连接
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
ClientHandler
클래스 , 소켓에서 받은 데이터를 처리하고 응답을 보냅니다: import java.net.Socket; public class EchoClient { public static void main(String[] args) throws Exception { // 连接到回声服务器的 8080 端口 Socket socket = new Socket("localhost", 8080); // 向服务器发送消息 socket.getOutputStream().write("Hello world!\n".getBytes()); // 从服务器接收响应 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = in.readLine(); // 打印服务器的响应 System.out.println("Server response: " + response); // 关闭连接 socket.close(); } }
실용 사례: 에코 서버
이것은 수신한 모든 메시지를 클라이언트에 반환하는 에코 서버의 간단한 예입니다:
🎜Server 🎜🎜rrreee🎜🎜Client🎜🎜rrreee위 내용은 Java 네트워크 프로그래밍에서 다중 스레드 통신을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!