给出程序的代码
时间: 2024-02-21 11:57:23 浏览: 153
很抱歉,由于篇幅限制无法在此给出完整的程序代码,但我可以给您提供一个大致的代码框架,供您参考:
服务器端代码:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server started.");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected: " + socket);
new ServerThread(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ServerThread extends Thread {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
// 这里可以实现好友列表的刷新
while (true) {
String message = in.readLine();
if (message == null) break;
System.out.println("Message received: " + message);
}
System.out.println("Client disconnected: " + socket);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
客户端代码:
```java
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Client {
private JFrame frame;
private JTextArea messageArea;
private JTextField messageField;
private JButton sendButton;
private JList<String> friendList;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public static void main(String[] args) {
new Client().run();
}
public void run() {
frame = new JFrame("Chat Room");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
JPanel messagePanel = new JPanel();
messagePanel.setLayout(new BorderLayout());
messageArea = new JTextArea();
messageArea.setEditable(false);
messagePanel.add(new JScrollPane(messageArea), BorderLayout.CENTER);
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new BorderLayout());
messageField = new JTextField();
inputPanel.add(messageField, BorderLayout.CENTER);
sendButton = new JButton("Send");
sendButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String message = messageField.getText();
out.println(message);
messageField.setText("");
}
});
inputPanel.add(sendButton, BorderLayout.EAST);
messagePanel.add(inputPanel, BorderLayout.SOUTH);
JPanel friendPanel = new JPanel();
friendPanel.setLayout(new BorderLayout());
DefaultListModel<String> friendListModel = new DefaultListModel<>();
friendListModel.addElement("Friend 1");
friendListModel.addElement("Friend 2");
friendListModel.addElement("Friend 3");
friendList = new JList<>(friendListModel);
friendPanel.add(new JScrollPane(friendList), BorderLayout.CENTER);
frame.add(messagePanel, BorderLayout.CENTER);
frame.add(friendPanel, BorderLayout.WEST);
connectToServer();
frame.setVisible(true);
}
private void connectToServer() {
try {
socket = new Socket("localhost", 8888);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
new ClientThread().start();
} catch (IOException e) {
e.printStackTrace();
}
}
class ClientThread extends Thread {
public void run() {
try {
while (true) {
String message = in.readLine();
if (message == null) break;
messageArea.append(message + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
请注意,这只是一个大致的代码框架,具体的实现细节还需要根据您的实际需求进行调整。此外,这个代码框架可能还存在一些潜在的安全问题,建议您在实际使用时进行进一步的优化和改进。
阅读全文
相关推荐



