javatcp实现一对一聊天
时间: 2023-11-26 22:04:37 浏览: 30
要实现Java TCP的一对一聊天,可以按照以下步骤进行:
1. 创建一个ServerSocket来监听客户端的连接请求:
```java
ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();
```
2. 在客户端中创建一个Socket来连接服务器:
```java
Socket socket = new Socket(serverHost, serverPort);
```
3. 在服务器和客户端中都创建一个输入输出流,用于发送和接收消息:
```java
// 服务器端
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
// 客户端
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
```
4. 使用输入输出流进行消息的发送和接收:
```java
// 服务器端
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream, true);
String message = reader.readLine(); // 读取客户端发送的消息
writer.println("Server received your message: " + message); // 发送回复消息给客户端
// 客户端
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello, server!"); // 发送消息给服务器
String response = reader.readLine(); // 读取服务器回复的消息
```
5. 在服务器和客户端中都需要使用多线程来处理多个连接请求,否则会阻塞主线程。
完整的示例代码如下:
服务器端:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
int port = 8888;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress());
new Thread(() -> {
try {
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream, true);
while (true) {
String message = reader.readLine();
if (message == null) {
break;
}
System.out.println("Received message from client: " + message);
writer.println("Server received your message: " + message);
}
clientSocket.close();
System.out.println("Client disconnected: " + clientSocket.getInetAddress().getHostAddress());
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}
```
客户端:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
String serverHost = "localhost";
int serverPort = 8888;
Socket socket = new Socket(serverHost, serverPort);
System.out.println("Connected to server: " + socket.getInetAddress().getHostAddress());
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello, server!");
String response = reader.readLine();
System.out.println("Received response from server: " + response);
socket.close();
System.out.println("Disconnected from server.");
}
}
```
以上代码可以实现在本地进行一对一的聊天。如果要在不同的机器上进行聊天,需要将服务器端的IP地址替换为服务器的公网IP地址,并且需要在服务器端的防火墙中开放对应的端口。