日期:2014-05-20 浏览次数:20748 次
package CheviC_UDP; import java.awt.*; import java.awt.event.*; import java.net.*; import java.util.*; public class UDPChat extends Frame { Label label_myPort = null; TextField textF_myPort = null; Button but_sureMyPort = null; TextArea textA_Chat = null; ScrollPane scrollPane = null; Label label_ip = null; TextField textF_ip = null; Label label_port = null; TextField textF_port = null; Label label_name = null; TextField textF_name = null; TextField textF_send = null; Button butSend = null; DatagramSocket socket = null; AcceptMsg am = null; // 构造函数 public UDPChat() { super("CheviC UDP Chat"); setBounds(400, 400, 600, 350); setLayout(new BorderLayout()); setVisible(true); init(); actionAdd(); acceptMsg(); } // 添加组件 void init() { Panel p1 = new Panel(); p1.setLayout(new FlowLayout(FlowLayout.LEFT)); label_myPort = new Label("set your port here:"); p1.add(label_myPort); textF_myPort = new TextField("5482", 3); p1.add(textF_myPort); but_sureMyPort = new Button("set"); p1.add(but_sureMyPort); label_ip = new Label(" set the connect ip here:"); p1.add(label_ip); textF_ip = new TextField("127.0.0.1",11); p1.add(textF_ip); label_port = new Label("port:"); p1.add(label_port); textF_port = new TextField("5483", 3); p1.add(textF_port); add(p1, BorderLayout.NORTH); textA_Chat = new TextArea(10, 40); scrollPane = new ScrollPane(); scrollPane.add(textA_Chat); add(scrollPane, BorderLayout.CENTER); Panel p = new Panel(); label_name = new Label("name:"); p.add(label_name); textF_name = new TextField("Naruto", 6); p.add(textF_name); textF_send = new TextField(51); p.add(textF_send); butSend = new Button(" Send "); p.add(butSend); add(p, BorderLayout.SOUTH); } // 事件添加 void actionAdd() { // 窗体关闭 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // 设置端口 but_sureMyPort.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setMyPort(); } }); // 发送信息 butSend.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { send(); } }); } // 设置本机端口 void setMyPort() { try { int port = Integer.parseInt(textF_myPort.getText()); socket = new DatagramSocket(port); } catch (Exception ex) { textF_myPort.setText("error"); } } // 发送信息 void send() { try { Calendar time = Calendar.getInstance(); String sendMsg = textF_name.getText() + "(" + time.getTime().toString() + "):\r\n" + textF_send.getText() + "\r\n"; byte[] msg = sendMsg.getBytes(); DatagramPacket out = new DatagramPacket(msg, 0, msg.length, InetAddress.getByName(textF_ip.getText().trim()), Integer.parseInt(textF_port.getText())); socket.send(out); showMsg(sendMsg); } catch (Exception ex) { textA_Chat.append(ex.toString()+"\r\n"); } } // 接收消息 void acceptMsg() { am = new AcceptMsg(); am.start(); //原来写错写成了am.run(); } //显示MSG void showMsg(String msg) { textA_Chat.append(msg); } // 接收信息的类 class AcceptMsg extends Thread { byte[] msg = null; AcceptMsg() { msg = new byte[256]; } @Override public void run() { if (socket != null) { while (true) { try { DatagramPacket in = new DatagramPacket(msg, msg.length); socket.receive(in); showMsg(in.getData().toString()); } catch (Exception ex) { // TODO 接收错误时的处理 textA_Chat.append("sorry,there is something wrong."); } } } } } public static void main(String[] args) { new UDPChat(); } }