写一个Java程序满足客户端和服务器互相发送和接收字符串,使用多线程
时间: 2024-04-16 09:26:15 浏览: 16
以下是一个使用多线程的Java程序示例,满足客户端和服务器之间互相发送和接收字符串需求:
```java
// 服务器
import java.io.*;
import java.net.*;
public Server {
public static void main(String[] args {
try {
ServerSocket serverSocket = ServerSocket(8080);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("客户端连接成功!");
ClientHandler clientHandler = new ClientHandler(clientSocket);
clientHandler.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ClientHandler extends Thread {
private Socket clientSocket;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine;
while ((inputLine = reader.readLine()) != null) {
System.out.println("接收到客户端消息:" + inputLine);
writer.println("服务器已接收到消息:" + inputLine);
}
reader.close();
writer.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
```java
// 客户端
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8080);
System.out.println("已连接到服务器!");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String inputLine;
while ((inputLine = reader.readLine()) != null) {
writer.println(inputLine);
String response = serverReader.readLine();
System.out.println("服务器响应:" + response);
}
reader.close();
serverReader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上代码中,服务器监听本地的8080端口,客户端连接到服务器的地址和端口。客户端发送输入的字符串到服务器,服务器接收到字符串后发送响应给客户端。这个过程在两个独立的线程中进行,分别处理客户端和服务器的输入输出。