Code
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* Created by linux_ccmj on 16-5-1.
*/
public class ChatUDP extends JFrame {
/* Message list, IP, Message sending, Socket */
List lis = new List(6); /* Message line */
TextField texIp = new TextField(15); /* IP address */
TextField texMesFie = new TextField(20); /* Message for sending */
DatagramSocket socDat = null; /* Socket */
/* ChatUDP */
public ChatUDP(){
/* Socket, Message list, Panel */
try {
socDat = new DatagramSocket(3000);
}
catch (Exception e){
e.printStackTrace();
}
this.add(lis,"Center");
Panel pan = new Panel();
this.add(pan,"South");
/* IP, Message sending */
pan.setLayout(new BorderLayout());
pan.add(texIp,"West");
pan.add(texMesFie,"East");
/* Message text receiving thread */
new Thread(new Runnable() {
@Override
public void run() {
try {
byte [] bufRec = new byte[1024];
DatagramPacket pacDatRec = new DatagramPacket(bufRec, 1024);
while (true){
socDat.receive(pacDatRec);
lis.add(new String(bufRec, 0, pacDatRec.getLength())
+ " from " + pacDatRec.getAddress().getHostAddress() + ": "
+ pacDatRec.getPort(),0);
}
}
catch (Exception e){
if (!socDat.isClosed()){
e.printStackTrace();
}
}
}
}).start();
/* Message text action */
texMesFie.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* Message sending */
try {
byte [] buf = null;
buf = texMesFie.getText().getBytes();
DatagramPacket pacDat = new DatagramPacket(buf, buf.length,
InetAddress.getByName(texIp.getText()),3000);
socDat.send(pacDat);
}
catch (Exception e1){
e1.printStackTrace();
}
/* Clean text */
texMesFie.setText("");
}
});
/* Closing */
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
socDat.close();
dispose();
System.exit(0);
}
});
}
/* Main */
public static void main(String[] args) {
ChatUDP chaWin = new ChatUDP();
chaWin.setSize(305,300);
chaWin.setTitle("Chat");
chaWin.setVisible(true);
chaWin.setResizable(false); /* Can not change the size */
}
}
2. Demo