结果

代码
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Main extends JFrame implements ActionListener {
private JLabel label;
private JTextField jTextField;
private JTextArea jTextArea;
private Container container;
int port1, port2;
DatagramSocket socket;
String name;
public Main(String name,int port1, int port2) {
super("多用户聊天程序");
this.port1 = port1;
this.port2 = port2;
this.name=name;
label = new JLabel(name);
jTextField = new JTextField(20);
jTextArea = new JTextArea(10, 25);
container = getContentPane();
container.setLayout(new FlowLayout());
container.add(label);
container.add(jTextField);
container.add(new JScrollPane(jTextArea));
try {
socket = new DatagramSocket(port1);
} catch (SocketException e) {
e.printStackTrace();
}
jTextArea.setEditable(false);
jTextArea.setBackground(Color.black);
jTextArea.setForeground(Color.green);
jTextField.addActionListener(this);
setSize(300, 250);
setVisible(true);
new receiveThread().start();
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
if (actionEvent.getSource() == jTextField) {
DatagramPacket sendMessage;
try {
String Message = name+"向您发送:"+jTextField.getText();
byte data[] = Message.getBytes();
sendMessage = new DatagramPacket(data, data.length, InetAddress.getLocalHost(), port2);
socket.send(sendMessage);
displayMessage("您已发送:" + jTextField.getText());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void displayMessage(String string) {
jTextArea.append(string + "\n");
}
class receiveThread extends Thread {
@Override
public void run() {
DatagramPacket receiveMessage;
try {
while (true) {
byte data[] = new byte[1024];
receiveMessage = new DatagramPacket(data, data.length);
socket.receive(receiveMessage);
displayMessage(new String(receiveMessage.getData(), 0, receiveMessage.getLength()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Main app1 = new Main("角色A",7879, 7878);
app1.setDefaultCloseOperation(EXIT_ON_CLOSE);
app1.setLocation(400,200);
Main app2 = new Main("角色B",7878, 7879);
app2.setLocation(800,200);
}
}