温馨提示:这篇文章已超过287天没有更新,请注意相关的内容是否还可用!
Java实现内网聊天室的基本思路是通过Socket编程实现客户端和服务器之间的通信。需要创建一个服务器端程序来监听客户端的连接请求,并实现消息的转发功能。需要创建一个客户端程序来与服务器建立连接,并实现消息的发送和接收功能。
以下是一个简单的示例代码,演示了如何使用Java实现内网聊天室:
1. 服务器端代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
private static final int PORT = 8888;
private static List<Socket> clients = new ArrayList<>();
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket clientSocket = serverSocket.accept();
clients.add(clientSocket);
System.out.println("客户端连接成功:" + clientSocket.getInetAddress().getHostAddress());
new Thread(() -> {
try {
InputStream inputStream = clientSocket.getInputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
String message = new String(buffer, 0, length);
System.out.println("收到消息:" + message);
broadcastMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void broadcastMessage(String message) {
for (Socket client : clients) {
try {
OutputStream outputStream = client.getOutputStream();
outputStream.write(message.getBytes());
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2. 客户端代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
private static final String SERVER_IP = "127.0.0.1";
private static final int SERVER_PORT = 8888;
public static void main(String[] args) {
try {
Socket socket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("已连接到服务器:" + socket.getInetAddress().getHostAddress());
new Thread(() -> {
try {
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
String message = new String(buffer, 0, length);
System.out.println("收到消息:" + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Scanner scanner = new Scanner(System.in);
while (true) {
String message = scanner.nextLine();
OutputStream outputStream = socket.getOutputStream();
outputStream.write(message.getBytes());
outputStream.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上代码实现了一个简单的内网聊天室。服务器端通过ServerSocket监听指定端口,接受客户端的连接请求,并将客户端的Socket对象保存在一个列表中。每当有新的消息到达时,服务器端会遍历所有客户端的Socket对象,将消息发送给每个客户端。
客户端通过Socket连接到服务器,启动一个新的线程用于接收服务器发送的消息。客户端还可以从控制台输入消息,并通过Socket发送给服务器。
请注意,以上示例代码仅为演示用途,没有处理异常情况和多线程同步问题。在实际应用中,需要根据具体需求进行适当的优化和改进。