java利用多线程、网络编程设计一个聊天程序。要求通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并把聊天内容显示出来。
时间: 2024-02-16 12:00:24 浏览: 101
好的,这是一个比较常见的聊天程序设计,我可以为你提供一个基本的框架,你可以根据自己的需要进行修改和扩展。
首先,我们需要创建一个服务器端和一个客户端,服务器端监听指定的端口号,等待客户端连接。当有客户端连接时,服务器端会为该客户端创建一个新的线程进行处理。客户端可以通过指定的IP地址和端口号连接到服务器端。
在服务器端,我们需要创建一个ServerSocket对象,并调用其accept()方法等待客户端连接。一旦有客户端连接,我们就创建一个新的线程来处理该客户端。在处理线程中,我们可以使用Socket对象来获取客户端的输入输出流,并通过输入流读取客户端发送的消息,通过输出流向客户端发送消息。
在客户端,我们需要创建一个Socket对象,并指定服务器的IP地址和端口号进行连接。连接成功后,我们可以通过Socket对象获取输入输出流,并通过输入流读取服务器发送的消息,通过输出流向服务器发送消息。
下面是一个简单的代码示例:
服务器端代码:
```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 final int PORT = 8888;
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server started, listening on port " + PORT);
while (true) {
Socket socket = serverSocket.accept();
new ServerThread(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Received message from client: " + line);
writer.println("Server received message: " + line);
}
reader.close();
writer.close();
socket.close();
} 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;
import java.util.Scanner;
public class ChatClient {
public static final String SERVER_IP = "127.0.0.1";
public static final int SERVER_PORT = 8888;
public static void main(String[] args) {
try {
Socket socket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("Connected to server");
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
writer.println(line);
String response = reader.readLine();
System.out.println("Received message from server: " + response);
}
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上代码只是一个简单的示例,你可以根据自己的需要进行修改和扩展,例如添加多个客户端连接,实现广播消息等功能。
阅读全文