用java如何用多线程实现两台计算机之间的服务器对话
时间: 2024-05-02 07:20:57 浏览: 8
要实现两台计算机之间的服务器对话,需要使用Java Socket编程和多线程编程。
以下是一个简单的Java多线程Socket服务器对话示例:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("Server started");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected");
new Thread(new ClientHandler(clientSocket)).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Received message from client: " + inputLine);
// Echo the message back to the client
out.println(inputLine);
if (inputLine.equals("Bye.")) {
break;
}
}
in.close();
out.close();
clientSocket.close();
System.out.println("Client disconnected");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
```
这个服务器程序监听端口1234,并在有客户端连接时启动一个新的线程来处理该客户端的请求。每个客户端都会有一个独立的线程处理它的请求。
在客户端方面,可以使用类似以下代码的Java Socket程序:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 1234);
System.out.println("Connected to server");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Send a message to the server
out.println("Hello from client");
// Wait for the server to respond
String response = in.readLine();
System.out.println("Received message from server: " + response);
// Close the socket
socket.close();
System.out.println("Disconnected from server");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
这个客户端程序连接到本地主机的端口1234,并发送一个消息给服务器,然后等待服务器的响应并打印它。最后关闭连接。
如果要实现多个客户端之间的对话,可以使用类似于上面的示例代码,并在服务器端的ClientHandler类中维护一个客户端列表。每当有一个新的客户端连接时,将其添加到该列表中,并将消息发送给所有其他客户端。当客户端断开连接时,从列表中删除它。