Java 多人聊天小程序:使用 Socket 实现实时聊天
实现一个聊天小程序,可以使用 Java 的 Swing 库来创建图形用户界面,使用 Socket 通信来实现多人聊天功能。
以下是一个简单的聊天小程序的示例代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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 ChatProgram extends JFrame {
private JTextArea chatArea;
private JTextField messageField;
private JButton sendButton;
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public ChatProgram() {
setTitle('Chat Program');
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
chatArea = new JTextArea();
chatArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatArea);
add(scrollPane, BorderLayout.CENTER);
JPanel messagePanel = new JPanel();
messagePanel.setLayout(new BorderLayout());
messageField = new JTextField();
messagePanel.add(messageField, BorderLayout.CENTER);
sendButton = new JButton('Send');
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = messageField.getText();
sendMessage(message);
messageField.setText('');
}
});
messagePanel.add(sendButton, BorderLayout.EAST);
add(messagePanel, BorderLayout.SOUTH);
setVisible(true);
startServer();
}
private void startServer() {
try {
serverSocket = new ServerSocket(1234);
chatArea.append('Server started. Waiting for clients...
');
clientSocket = serverSocket.accept();
chatArea.append('Client connected.
');
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
Thread receivingThread = new Thread(new Runnable() {
@Override
public void run() {
String message;
try {
while ((message = in.readLine()) != null) {
chatArea.append('Client: ' + message + '\n');
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
receivingThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private void sendMessage(String message) {
out.println(message);
chatArea.append('You: ' + message + '\n');
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ChatProgram();
}
});
}
}
该程序创建了一个简单的聊天界面,包括一个聊天记录区域、一个消息输入框和一个发送按钮。通过 Socket 通信,程序可以作为服务器等待客户端连接,并在客户端连接后接收和发送消息。
请注意,上述代码只是一个简单的示例,没有处理多人同时连接的情况,也没有对异常进行充分的处理。在实际开发中,还需要添加更多的功能和错误处理。
原文地址: https://www.cveoy.top/t/topic/fOxp 著作权归作者所有。请勿转载和采集!