中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于UDP協議開發Java聊天系統的方法

發布時間:2022-02-28 10:23:15 來源:億速云 閱讀:105 作者:iii 欄目:開發技術

這篇文章主要介紹“基于UDP協議開發Java聊天系統的方法”,在日常操作中,相信很多人在基于UDP協議開發Java聊天系統的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”基于UDP協議開發Java聊天系統的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

代碼展示

下面展示一些 Client類

/**-------------------
 * 發送端
 **---------------------*/
class Client extends Thread{
    private static String content;       //發送內容
    private static int port;             //發送端口
    private static int target;           //目標端口
    private static byte[] addr;          //目標ip地址
        /**-------------------
         *構造函數
         **---------------------*/
    public Client(String content,int port,int target,byte[] addr){
        this.content=content;
        this.port=port;
        this.target=target;
        this.addr=addr;
    }
        /**-------------------
         *發送端函數
         **---------------------*/
    public void run(){
        DatagramSocket client= null;
        try {
            //定義發送端端口為 port 的DatagramSocket對象
            client = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        String str=content;

        DatagramPacket packet= null;
        try {
            //定義DatagramPacket對象,用于封裝發送的數據以及目標地址 target
            packet = new DatagramPacket(str.getBytes(),str.getBytes().length,
                    InetAddress.getByAddress(addr),target);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        try {
            //發送數據
            client.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //關閉釋放資源
        client.close();
    }
}

    /**-------------------
     *接收端
     **---------------------*/
class Server extends Thread{
    private static JTextArea jt;           //對話框
    private static int target;             //目標端口
        /*-------------------
              構造函數
        ---------------------*/
    public  Server(JTextArea jt,int target){
        this.jt=jt;
        this.target=target;
    }

下面展示一些 Server類

    /*-------------------
    接收端
    ---------------------*/
class Server extends Thread{
    private static JTextArea jt;           //對話框
    private static int target;             //目標端口
        /*-------------------
              構造函數
        ---------------------*/
    public  Server(JTextArea jt,int target){
        this.jt=jt;
        this.target=target;
    }

        /*-------------------
              接收端函數
        ---------------------*/
    public void run(){
        String str;
        DatagramSocket server= null;

        try {
            //定義一個端口號為 target 的接收端DatagramSocket對象
            server = new DatagramSocket(target);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        byte[] buf=new byte[1024];
        //定義一個DatagramPacket數據報對象,用于封裝接收數據
        DatagramPacket packet=new DatagramPacket(buf, buf.length);

        while (true){
            try {
                //等待接收數據,在數據沒有被接收到之前會被堵塞
                server.receive(packet);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //使用DatagramPacket的方法獲得接收到的信息,并轉為字符串類型
            str=new String(packet.getData(),
                    0,packet.getLength());
            //將接收到的信息打印到對話框
            jt.append("接收到:"+str+"
");
        }
    }
}

下面展示一些 Main類

public class Main {
    public static int port;
    public static int target;
    public static byte[] addr;
    public static void Login(){
        System.out.print("請輸入端口號:");
        Scanner ScPort=new Scanner(System.in);
        port=ScPort.nextInt();

        System.out.print("請輸入目標端口號1:");
        Scanner ScTarget=new Scanner(System.in);
        target=ScTarget.nextInt();

        System.out.print("請輸入目標端口號2:");
        Scanner ScTarget2=new Scanner(System.in);
        int target2=ScTarget2.nextInt();

        System.out.print("請輸入目標IP地址:");
        Scanner Scaddr=new Scanner(System.in);
        /*---------------------
        將目標IP存儲到數組中
        -----------------------*/
        String ip=Scaddr.nextLine();
        /*---------------------
        public String[] split(String regex):
             根據給定正則表達式的匹配拆分此字符串
         ----------------------*/
        String[] ii=ip.split("\.");
        /*---------------------
        我們現在使用的IPv4是用一個32位的二進制數來存儲的,為了方便記憶,
        會將其分成4個8位的二進制數(4個一字節的二進制數),每8位之間用圓點隔開。
        而每8位二進制數可以轉換為一個0~255的十進制數,例如103.42.176.244,
        這種寫法被稱為點數表示法
         ----------------------*/
        byte[] addr=new byte[4];
        for(int i=0;i<4;i++){
            addr[i]=(byte)(Integer.parseInt(ii[i]));
        }

        System.out.println("窗口啟動中....");
        new Thread(new Server(CreateAndShowGUI(port,target,addr),target2),"接收服務").start();
    }
    /*-------------------
    GUI界面
    ---------------------*/
    public static JTextArea CreateAndShowGUI(int port,int target,byte[] addr){
        /*---------------------
        創建界面
         ----------------------*/
        JFrame jf=new JFrame("聊天界面");
        jf.setLocation(400,200);
        jf.setSize(400,300);
        /*---------------------
        設置布局
         ----------------------*/
        jf.setLayout(new BorderLayout());
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        /*---------------------
        創建聊天窗口
         ----------------------*/
        JTextArea jt=new JTextArea(14,34);
        JScrollPane scrollPane=new JScrollPane(jt);
        jt.setEditable(false);
        /*---------------------
        創建發送窗口
         ----------------------*/
        JTextField jte=new JTextField(20);

        JButton jb=new JButton("發送");
        jb.addActionListener(e->{
            String content=jte.getText();
            /*---------------------
            為發送按鈕創建動作
             ----------------------*/
            if (content!=null&&!content.trim().equals("")){
                /*-------------------
                判斷信息是否為空
                若為空,在在對話框提示 你輸入的內容為空
                反之發送
                 --------------------*/
                jt.append("輸入信息為:"+content+"
");
                /*--------------
                將發送框信息發送到目標對話框
                傳入Client方法的參數分別為
                “發送內容,發送端口,目標端口,目標IP地址”
                ----------------*/
                try {
                    new Thread(new Client(content,port,target,addr),"發送服務").start();
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            }else{
                jt.append("你輸入的內容為空");
            }
            jte.setText("");      //信息發送后,將發送框重置
        });

        JPanel jp=new JPanel();
        JLabel jl=new JLabel("聊天信息");

        jp.add(jl);
        jp.add(jte);
        jp.add(jb);
        jf.add(jt,BorderLayout.PAGE_START);
        jf.add(jp,BorderLayout.PAGE_END);
        //顯示GUI界面
        jf.setVisible(true);
        return jt;
    }

    public static void main(String[] args) throws Exception{
        Login();
    }
}

到此,關于“基于UDP協議開發Java聊天系統的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇雄县| 宁明县| 永福县| 九台市| 沙洋县| 屯门区| 固原市| 达日县| 社会| 兰西县| 通辽市| 大名县| 呼图壁县| 深圳市| 凌源市| 平顶山市| 阿拉善右旗| 乌兰浩特市| 凤冈县| 尤溪县| 定边县| 乌拉特前旗| 礼泉县| 佛山市| 拉萨市| 阳城县| 清流县| 余姚市| 云安县| 宝丰县| 南昌县| 杭锦后旗| 谷城县| 金坛市| 阿图什市| 三亚市| 神木县| 成武县| 汉沽区| 册亨县| 河东区|