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

本文介绍了一个基于UDP协议的实时聊天应用,通过创建一个客户端界面,实现了消息的发送和接收功能。程序通过监听特定端口接收来自不同IP地址的消息,并将其显示在列表中。同时,用户可以输入消息并发送到指定的服务器端口。
2013

被折叠的 条评论
为什么被折叠?



