基于UDP協(xié)議的Socket通信

TCP和UDP最大的區(qū)別在于是否需要客戶端與服務(wù)端建立連接后才能進(jìn)行 數(shù)據(jù)傳輸,TCP的,傳輸前先開服務(wù)端兵睛,accept,等客戶端接入窥浪,然后獲得 客戶端socket然后進(jìn)行IO操作,而UDP則不用笛丙,UDP以數(shù)據(jù)報(bào)作為數(shù)據(jù)的傳輸載體漾脂,在進(jìn)行傳輸時(shí) 首先要把傳輸?shù)臄?shù)據(jù)定義成數(shù)據(jù)報(bào)(Datagram),在數(shù)據(jù)報(bào)中指明數(shù)據(jù)要到達(dá)的Socket(主機(jī)地址 和端口號(hào))胚鸯,然后再將數(shù)據(jù)以數(shù)據(jù)報(bào)的形式發(fā)送出去骨稿,然后就沒有然后了,服務(wù)端收不收到我就 不知道了姜钳,除非服務(wù)端收到后又給我回一段確認(rèn)的數(shù)據(jù)報(bào)~

?

1.服務(wù)端實(shí)現(xiàn)步驟:

Step 1:創(chuàng)建DatagramSocket坦冠,指定端口號(hào)
Step 2:創(chuàng)建DatagramPacket
Step 3:接收客戶端發(fā)送的數(shù)據(jù)信息
Step 4:讀取數(shù)據(jù)

示例代碼

public class UPDServer {
    public static void main(String[] args) throws IOException {
        /*
         * 接收客戶端發(fā)送的數(shù)據(jù)
         */
        // 1.創(chuàng)建服務(wù)器端DatagramSocket,指定端口
        DatagramSocket socket = new DatagramSocket(12345);
        // 2.創(chuàng)建數(shù)據(jù)報(bào)哥桥,用于接收客戶端發(fā)送的數(shù)據(jù)
        byte[] data = new byte[1024];// 創(chuàng)建字節(jié)數(shù)組辙浑,指定接收的數(shù)據(jù)包的大小
        DatagramPacket packet = new DatagramPacket(data, data.length);
        // 3.接收客戶端發(fā)送的數(shù)據(jù)
        System.out.println("****服務(wù)器端已經(jīng)啟動(dòng),等待客戶端發(fā)送數(shù)據(jù)");
        socket.receive(packet);// 此方法在接收到數(shù)據(jù)報(bào)之前會(huì)一直阻塞
        // 4.讀取數(shù)據(jù)
        String info = new String(data, 0, packet.getLength());
        System.out.println("我是服務(wù)器拟糕,客戶端說:" + info);

        /*
         * 向客戶端響應(yīng)數(shù)據(jù)
         */
        // 1.定義客戶端的地址判呕、端口號(hào)、數(shù)據(jù)
        InetAddress address = packet.getAddress();
        int port = packet.getPort();
        byte[] data2 = "歡迎您!".getBytes();
        // 2.創(chuàng)建數(shù)據(jù)報(bào)送滞,包含響應(yīng)的數(shù)據(jù)信息
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
        // 3.響應(yīng)客戶端
        socket.send(packet2);
        // 4.關(guān)閉資源
        socket.close();
    }
}

2.客戶端實(shí)現(xiàn)步驟:

Step 1:定義發(fā)送信息
Step 2:創(chuàng)建DatagramPacket侠草,包含將要發(fā)送的信息
Step 3:創(chuàng)建DatagramSocket
Step 4:發(fā)送數(shù)據(jù)

public class UDPClient {
    public static void main(String[] args) throws IOException {
        /*
         * 向服務(wù)器端發(fā)送數(shù)據(jù)
         */
        // 1.定義服務(wù)器的地址、端口號(hào)犁嗅、數(shù)據(jù)
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8800;
        byte[] data = "用戶名:admin;密碼:123".getBytes();
        // 2.創(chuàng)建數(shù)據(jù)報(bào)边涕,包含發(fā)送的數(shù)據(jù)信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
        // 3.創(chuàng)建DatagramSocket對(duì)象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服務(wù)器端發(fā)送數(shù)據(jù)報(bào)
        socket.send(packet);

        /*
         * 接收服務(wù)器端響應(yīng)的數(shù)據(jù)
         */
        // 1.創(chuàng)建數(shù)據(jù)報(bào),用于接收服務(wù)器端響應(yīng)的數(shù)據(jù)
        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服務(wù)器響應(yīng)的數(shù)據(jù)
        socket.receive(packet2);
        // 3.讀取數(shù)據(jù)
        String reply = new String(data2, 0, packet2.getLength());
        System.out.println("我是客戶端褂微,服務(wù)器說:" + reply);
        // 4.關(guān)閉資源
        socket.close();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末功蜓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蕊梧,更是在濱河造成了極大的恐慌霞赫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肥矢,死亡現(xiàn)場離奇詭異端衰,居然都是意外死亡叠洗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門旅东,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灭抑,“玉大人,你說我怎么就攤上這事抵代√诮冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵荤牍,是天一觀的道長案腺。 經(jīng)常有香客問我,道長康吵,這世上最難降的妖魔是什么劈榨? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮晦嵌,結(jié)果婚禮上同辣,老公的妹妹穿的比我還像新娘。我一直安慰自己惭载,他們只是感情好旱函,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著描滔,像睡著了一般棒妨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伴挚,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天靶衍,我揣著相機(jī)與錄音,去河邊找鬼茎芋。 笑死颅眶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的田弥。 我是一名探鬼主播涛酗,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼偷厦!你這毒婦竟也來了商叹?” 一聲冷哼從身側(cè)響起洋腮,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤笼痹,失蹤者是張志新(化名)和其女友劉穎辱姨,沒想到半個(gè)月后熬甚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讯赏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年络它,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纠吴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聚至,死狀恐怖酷勺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扳躬,我是刑警寧澤脆诉,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站贷币,受9級(jí)特大地震影響击胜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜役纹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一潜的、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧字管,春花似錦、人聲如沸信不。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抽活。三九已至硫戈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間下硕,已是汗流浹背丁逝。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梭姓,地道東北人霜幼。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像誉尖,于是被迫代替她去往敵國和親罪既。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 11.1 引言 UDP是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都正好產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào)铡恕,并組裝成一...
    張芳濤閱讀 2,783評(píng)論 1 6
  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 2,939評(píng)論 0 14
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記诀艰,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評(píng)論 0 8
  • 1.這篇文章不是本人原創(chuàng)的柬甥,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的饮六,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評(píng)論 6 174
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,781評(píng)論 0 25