Socket實現(xiàn)UDP編程

image.png
image.png

適用于一次的少量的連接

服務器

package com.company;

import java.io.IOException;
import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try {
            //1、創(chuàng)建服務器端DatagramSocket
            DatagramSocket datagramSocket = new DatagramSocket(8080);

            while (true){
                //2君丁、創(chuàng)建數(shù)據(jù)報啼辣,用于接收客戶端發(fā)送的數(shù)據(jù)
                byte[] bytes=new byte[1024];//1k
                DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
                System.out.println("服務器端等待新的客戶端發(fā)送數(shù)據(jù)");
                //3朴乖、此方法在獲取到數(shù)據(jù)報之前原环,會處于阻塞狀態(tài)
                datagramSocket.receive(datagramPacket);

                new UDPServerThread(datagramSocket,datagramPacket,bytes).run();
            }


//            datagramSocket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

多線程

package com.company;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServerThread extends Thread {

    DatagramPacket datagramPacket;
    byte[] bytes;

    //和本線程相關的DatagramSocket
    DatagramSocket datagramSocket = null;


    public UDPServerThread(DatagramSocket datagramSocket,DatagramPacket datagramPacket,
                           byte[] bytes) {
        this.datagramSocket = datagramSocket;
        this.datagramPacket = datagramPacket;
        this.bytes = bytes;
    }

    @Override
    public void run() {

        try {
            //4、讀取數(shù)據(jù)
            String info = new String(bytes, 0, datagramPacket.getLength(), "gbk");
            System.out.println("獲取到客戶端數(shù)據(jù):" + info);

            //5芽世、響應客戶端數(shù)據(jù),創(chuàng)建數(shù)據(jù)包
            InetAddress address = datagramPacket.getAddress();//客戶端地址
            int port = datagramPacket.getPort();//客戶端端口
            byte[] bytes1 = "歡迎您".getBytes("gbk");
            DatagramPacket packet = new DatagramPacket(bytes1, bytes1.length, address, port);
            datagramSocket.send(packet);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客戶端

package com.company;

import java.io.IOException;
import java.net.*;

public class UDPClient {

    public static void main(String[] args) {
        try {
            //1聋呢、定義服務器的地址、端口號颠区、數(shù)據(jù)
            InetAddress inetAddress = InetAddress.getByName("localhost");
            int port = 8080;
            //2削锰、創(chuàng)建DatagramSocket對象
            DatagramSocket socket = new DatagramSocket();

            //3、創(chuàng)建數(shù)據(jù)報
            byte[] bytes = "admin;456".getBytes("gbk");
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length, inetAddress, port);

            //4毕莱、發(fā)送數(shù)據(jù)報
            socket.send(packet);

            //5器贩、闖將獲取的數(shù)據(jù)報
            byte[] bytes1 = new byte[1024];
            DatagramPacket packet1 = new DatagramPacket(bytes1, bytes1.length);
            socket.receive(packet1);

            String info = new String(bytes1, 0, packet1.getLength(), "gbk");
            System.out.print("收到服務端數(shù)據(jù):" + info);


            //5、關閉資源
            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朋截,一起剝皮案震驚了整個濱河市蛹稍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌部服,老刑警劉巖稳摄,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饲宿,居然都是意外死亡厦酬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門瘫想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仗阅,“玉大人,你說我怎么就攤上這事国夜〖踉耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵车吹,是天一觀的道長筹裕。 經(jīng)常有香客問我,道長窄驹,這世上最難降的妖魔是什么朝卒? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮乐埠,結果婚禮上抗斤,老公的妹妹穿的比我還像新娘。我一直安慰自己丈咐,他們只是感情好瑞眼,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵逊,像睡著了一般伤疙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辆影,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天徒像,我揣著相機與錄音花吟,去河邊找鬼。 笑死厨姚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的键菱。 我是一名探鬼主播谬墙,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼经备!你這毒婦竟也來了拭抬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤侵蒙,失蹤者是張志新(化名)和其女友劉穎造虎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纷闺,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡算凿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了犁功。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氓轰。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浸卦,靈堂內(nèi)的尸體忽然破棺而出署鸡,到底是詐尸還是另有隱情,我是刑警寧澤限嫌,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布靴庆,位于F島的核電站,受9級特大地震影響怒医,放射性物質(zhì)發(fā)生泄漏炉抒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一稚叹、第九天 我趴在偏房一處隱蔽的房頂上張望端礼。 院中可真熱鬧,春花似錦入录、人聲如沸蛤奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡桥。三九已至,卻和暖如春蚀同,著一層夾襖步出監(jiān)牢的瞬間缅刽,已是汗流浹背啊掏。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衰猛,地道東北人迟蜜。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像啡省,于是被迫代替她去往敵國和親娜睛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理卦睹,服務發(fā)現(xiàn)畦戒,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1结序、基礎簡介 UDP協(xié)議即用戶數(shù)據(jù)報協(xié)議障斋,是無連接、不可靠徐鹤、無序的垃环,但相對而言,UDP協(xié)議的傳輸速度會更快一些返敬;U...
    黒貓閱讀 1,193評論 0 2
  • 從三月份找實習到現(xiàn)在晴裹,面了一些公司,掛了不少救赐,但最終還是拿到小米涧团、百度、阿里经磅、京東泌绣、新浪、CVTE预厌、樂視家的研發(fā)崗...
    時芥藍閱讀 42,243評論 11 349
  • 我在春天里等你 綠色阿迈,意味著生機勃勃;綠色轧叽,象征著蓬勃發(fā)展苗沧;綠色,掀開希望的面紗炭晒。 我在春天里等你待逞,等你茁壯成長,...
    林燕妮2020閱讀 464評論 0 0
  • 來到林芝的第一晚是我自入藏以來睡的最好的一晚网严,自此以后的每晚再也沒有了入藏第一晚時心口焦灼的高原反應识樱。林芝是剛興起...
    孤獨的梵高閱讀 241評論 1 1