利用java中的多线程、网络编程设计一个聊天程序。要求通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并把聊天内容显示出来。
时间: 2024-02-03 14:15:14 浏览: 21
好的,下面是一个简单的聊天程序的实现示例:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8888); // 监听指定端口号
System.out.println("等待客户端连接...");
Socket socket = server.accept(); // 等待客户端连接
System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress().getHostAddress());
// 为客户端创建读取器和写入器
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 启动一个线程来接收客户端发送的消息
Thread receiveThread = new Thread(() -> {
try {
while (true) {
String message = reader.readLine();
if (message == null) {
break;
}
System.out.println("客户端说:" + message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
receiveThread.start();
// 主线程用于发送消息
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String message = consoleReader.readLine();
writer.println(message);
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
客户端程序:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ChatClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888); // 连接服务器
System.out.println("已连接服务器,IP地址为:" + socket.getInetAddress().getHostAddress());
// 为服务器创建读取器和写入器
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// 启动一个线程来接收服务器发送的消息
Thread receiveThread = new Thread(() -> {
try {
while (true) {
String message = reader.readLine();
if (message == null) {
break;
}
System.out.println("服务器说:" + message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
receiveThread.start();
// 主线程用于发送消息
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String message = consoleReader.readLine();
writer.println(message);
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这个聊天程序比较简单,只能实现客户端和服务器之间的聊天,而且只能同时支持一个客户端。如果要实现多人聊天,可以使用多线程和循环来处理。同时,还需要考虑消息的格式和协议等问题。