JAVA_UDP_ChatUDP

  1. 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

160750_CrF0_2363350.png


转载于:https://my.oschina.net/u/2363350/blog/668759

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值