为我提供Java代码要求1. 编写图形用户界面,教师为服务器端,学生为客户端,一个服务端可以接受多个客户端连接。 2. 要求完成教师白板的建立,实现教师在白板上画图,学生端能够实时刷新。 3. 教师可以传输文件给学生。 4. 学生可以向教师提问,问答内容所有学生都能看到。
时间: 2024-03-23 22:42:43 浏览: 20
好的,以下是Java代码示例:
教师端代码:
```java
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Teacher extends JFrame implements ActionListener {
private ServerSocket serverSocket;
private ArrayList<Socket> clientSockets;
private ArrayList<ObjectOutputStream> outputStreams;
private JPanel whiteboard;
private JButton clearBtn, sendBtn;
private JTextArea chatArea;
private JScrollPane chatScrollPane;
private JTextField chatField;
private JFileChooser fileChooser;
public Teacher() {
setTitle("Teacher");
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 初始化界面组件
whiteboard = new JPanel();
clearBtn = new JButton("Clear");
sendBtn = new JButton("Send");
chatArea = new JTextArea();
chatScrollPane = new JScrollPane(chatArea);
chatField = new JTextField();
fileChooser = new JFileChooser();
whiteboard.setBackground(Color.WHITE);
whiteboard.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// 绘制图形
}
});
clearBtn.addActionListener(this);
sendBtn.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(clearBtn);
buttonPanel.add(sendBtn);
JPanel chatPanel = new JPanel(new BorderLayout());
chatPanel.add(chatScrollPane, BorderLayout.CENTER);
chatPanel.add(chatField, BorderLayout.SOUTH);
add(whiteboard, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.NORTH);
add(chatPanel, BorderLayout.SOUTH);
setVisible(true);
// 初始化服务器
try {
serverSocket = new ServerSocket(9999);
clientSockets = new ArrayList<Socket>();
outputStreams = new ArrayList<ObjectOutputStream>();
while (true) {
Socket socket = serverSocket.accept();
clientSockets.add(socket);
ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());
outputStreams.add(outputStream);
// 启动客户端线程
new ClientThread(socket).start();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 处理按钮事件
public void actionPerformed(ActionEvent e) {
if (e.getSource() == clearBtn) {
// 清空白板
} else if (e.getSource() == sendBtn) {
// 发送消息
String message = chatField.getText();
chatArea.append("Teacher: " + message + "\n");
broadcastMessage("Teacher: " + message);
chatField.setText("");
}
}
// 广播消息给所有客户端
private void broadcastMessage(String message) {
for (ObjectOutputStream outputStream : outputStreams) {
try {
outputStream.writeObject(message);
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
// 处理客户端消息的线程
private class ClientThread extends Thread {
private Socket socket;
private ObjectInputStream inputStream;
public ClientThread(Socket socket) throws IOException {
this.socket = socket;
inputStream = new ObjectInputStream(socket.getInputStream());
}
public void run() {
try {
while (true) {
String message = (String) inputStream.readObject();
chatArea.append(message + "\n");
broadcastMessage(message);
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
inputStream.close();
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new Teacher();
}
}
```
学生端代码:
```java
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Student extends JFrame implements ActionListener {
private Socket socket;
private ObjectOutputStream outputStream;
private ObjectInputStream inputStream;
private JPanel whiteboard;
private JTextArea chatArea;
private JScrollPane chatScrollPane;
private JTextField chatField;
private JButton sendBtn, fileBtn;
public Student() {
setTitle("Student");
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 初始化界面组件
whiteboard = new JPanel();
chatArea = new JTextArea();
chatScrollPane = new JScrollPane(chatArea);
chatField = new JTextField();
sendBtn = new JButton("Send");
fileBtn = new JButton("File");
whiteboard.setBackground(Color.WHITE);
chatArea.setEditable(false);
sendBtn.addActionListener(this);
fileBtn.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(sendBtn);
buttonPanel.add(fileBtn);
JPanel chatPanel = new JPanel(new BorderLayout());
chatPanel.add(chatScrollPane, BorderLayout.CENTER);
chatPanel.add(chatField, BorderLayout.SOUTH);
add(whiteboard, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.NORTH);
add(chatPanel, BorderLayout.SOUTH);
setVisible(true);
// 连接服务器
try {
socket = new Socket("localhost", 9999);
outputStream = new ObjectOutputStream(socket.getOutputStream());
inputStream = new ObjectInputStream(socket.getInputStream());
// 启动接收消息线程
new ReceiveThread().start();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 处理按钮事件
public void actionPerformed(ActionEvent e) {
if (e.getSource() == sendBtn) {
// 发送消息
String message = chatField.getText();
chatArea.append("Student: " + message + "\n");
sendMessage("Student: " + message);
chatField.setText("");
} else if (e.getSource() == fileBtn) {
// 发送文件
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
sendFile(file);
}
}
}
// 发送消息
private void sendMessage(String message) {
try {
outputStream.writeObject(message);
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 发送文件
private void sendFile(File file) {
try {
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
outputStream.flush();
}
fileInputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 接收消息的线程
private class ReceiveThread extends Thread {
public void run() {
try {
while (true) {
Object message = inputStream.readObject();
if (message instanceof String) {
chatArea.append((String) message + "\n");
} else if (message instanceof byte[]) {
// 接收文件
byte[] buffer = (byte[]) message;
FileOutputStream fileOutputStream = new FileOutputStream("file.txt");
fileOutputStream.write(buffer);
fileOutputStream.close();
}
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new Student();
}
}
```
这里只是提供了一个简单的代码示例,具体细节需要您自己根据需求进行实现。