Socket實(shí)現(xiàn)UDP編程

image.png
image.png

適用于一次的少量的連接

服務(wù)器

package com.company;

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

public class UDPServer {
    public static void main(String[] args) {
        try {
            //1、創(chuàng)建服務(wù)器端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("服務(wù)器端等待新的客戶端發(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;

    //和本線程相關(guān)的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、響應(yīng)客戶端數(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、定義服務(wù)器的地址、端口號、數(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("收到服務(wù)端數(shù)據(jù):" + info);


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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 1、基礎(chǔ)簡介 UDP協(xié)議即用戶數(shù)據(jù)報協(xié)議,是無連接、不可靠、無序的,但相對而言,UDP協(xié)議的傳輸速度會更快一些;U...
    黒貓閱讀 1,205評論 0 2
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,753評論 11 349
  • 我在春天里等你 綠色,意味著生機(jī)勃勃;綠色,象征著蓬勃發(fā)展;綠色,掀開希望的面紗。 我在春天里等你,等你茁壯成長,...
    林燕妮2020閱讀 549評論 0 0
  • 來到林芝的第一晚是我自入藏以來睡的最好的一晚,自此以后的每晚再也沒有了入藏第一晚時心口焦灼的高原反應(yīng)。林芝是剛興起...
    孤獨(dú)的梵高閱讀 305評論 1 1

友情鏈接更多精彩內(nèi)容