用UDP编写网络聊天程序

来源:互联网 发布:len在vb中什么意思 编辑:程序博客网 时间:2024/05/21 21:43

这里写图片描述

实现代码:

import java.awt.*;import java.awt.event.*;import java.net.*;public class Chat extends Frame {    List lst = new List(6);    TextField tfIP = new TextField(15);    TextField tfData = new TextField(20);    DatagramSocket ds = null;    public Chat() {        try {            ds = new DatagramSocket(3000);        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }        this.add(lst, "Center");        Panel p = new Panel();        this.add(p, "South");        p.setLayout(new BorderLayout());        p.add(tfIP, "West");        p.add(tfData, "East");        new Thread(new Runnable() {            public void run() {                // TODO Auto-generated method stub                byte[] buf = new byte[1024];                DatagramPacket dp = new DatagramPacket(buf, 1024);                while (true) {                    try {                        ds.receive(dp);                        lst.add(new String(buf, 0, dp.getLength()) + "from "                                + dp.getAddress().getHostAddress() + ":"                                + dp.getPort(), 0);                    } catch (Exception e) {                        // TODO: handle exception                        if (!ds.isClosed()) {                            e.printStackTrace();                        }                    }                }            }        }).start();        tfData.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                byte[] buf;                buf = tfData.getText().getBytes();                try {                    DatagramPacket dp = new DatagramPacket(buf, buf.length,                            InetAddress.getByName(tfIP.getText()), 3000);                    ds.send(dp);                } catch (Exception e2) {                    // TODO: handle exception                    e2.printStackTrace();                }                tfData.setText("");            }        });        addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                ds.close();                dispose();                System.exit(0);            }        });    }    public static void main(String[] args) {        // TODO Auto-generated method stub        System.out.println("Starting Chat...");        Chat mainFrame = new Chat();        mainFrame.setSize(300, 400);        mainFrame.setTitle("TestButton");        mainFrame.setVisible(true);        mainFrame.setResizable(false);    }}

运行结果:

这里写图片描述

要深刻理解代码。

1 0