最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)udp通訊的代碼

 更新時間:2018年09月22日 10:59:27   作者:rising1234  
這篇文章主要為大家詳細介紹了java實現(xiàn)udp通訊的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

需求:應(yīng)用A(通常有多個)和應(yīng)用B(1個)進行 socket通訊,應(yīng)用A必須知道應(yīng)用B的ip地址(在應(yīng)用A的配置文件中寫死的),這個時候就必須把應(yīng)用B的ip設(shè)成固定ip(但是某些時候如更換路由后要重新設(shè)置網(wǎng)絡(luò),但是操作人員不知道這個規(guī)則),就有可能造成應(yīng)用A和應(yīng)用B無法進行正常通訊,所以要改成應(yīng)用A動態(tài)獲取應(yīng)用B的ip地址。

經(jīng)過討論決定采用udp協(xié)議實現(xiàn),upd是一種無連接的傳輸層協(xié)議。應(yīng)用A在不知道應(yīng)用B的 ip情況下 可以使用廣播地址255.255.255.255,將消息發(fā)送到在同一廣播網(wǎng)絡(luò)上的B。從而獲取B的ip。

實現(xiàn)代碼:

B應(yīng)用為服務(wù)端:將udp監(jiān)聽放到一個線程中,當(dāng)有客戶端請求時就會進行響應(yīng)

/**
 * udp連接,用于動態(tài)ip, pos向255.255.255.255:5060發(fā)送請求即可
 * **/
public class UdpServer extends Thread implements Runnable {
  private final int MAX_LENGTH = 1024;
  private final int PORT = 5060;
  private DatagramSocket datagramSocket;
  
  public void run() {
    try {
      init();
      while(true){
        try {
          byte[] buffer = new byte[MAX_LENGTH];
          DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
          receive(packet);
          String receStr = new String(packet.getData(), 0 , packet.getLength());
          System.out.println("接收數(shù)據(jù)包" + receStr);
          byte[] bt = new byte[packet.getLength()];
          
          System.arraycopy(packet.getData(), 0, bt, 0, packet.getLength());
          System.out.println(packet.getAddress().getHostAddress() + ":" + packet.getPort() + ":" + Arrays.toString(bt));
          packet.setData(bt);
          response(packet);
          
        } catch (Exception e) {
          e.printStackTrace();
          LoggerUtil.error("udp線程出現(xiàn)異常:" + e.toString());
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void receive(DatagramPacket packet) throws Exception {
    datagramSocket.receive(packet);
  }

  public void response(DatagramPacket packet) throws Exception {
    datagramSocket.send(packet);
  }
  
  /**
   * 初始化連接
   */
  public void init(){
    try {
      datagramSocket = new DatagramSocket(PORT);
      System.out.println("udp服務(wù)端已經(jīng)啟動!");
    } catch (Exception e) {
      datagramSocket = null;
      System.out.println("udp服務(wù)端啟動失?。?);
      e.printStackTrace();
    }
  }
}

客戶端:本來客戶端是使用pb來實現(xiàn)的,但是這里使用java來模擬

/***
 * UDP Client端
 ***/
public class UdpClient {
  
  private String sendStr = "hello";
  private String netAddress = "255.255.255.255";
  private final int PORT = 5060;
  
  private DatagramSocket datagramSocket;
  private DatagramPacket datagramPacket;
  
  public UdpClient(){
    try { 
      datagramSocket = new DatagramSocket();
      byte[] buf = sendStr.getBytes();
      InetAddress address = InetAddress.getByName(netAddress);
      datagramPacket = new DatagramPacket(buf, buf.length, address, PORT);
      datagramSocket.send(datagramPacket);
      
      byte[] receBuf = new byte[1024];
      DatagramPacket recePacket = new DatagramPacket(receBuf, receBuf.length);
      datagramSocket.receive(recePacket);
      
      String receStr = new String(recePacket.getData(), 0 , recePacket.getLength());
      
       //獲取服務(wù)端ip
      String serverIp = recePacket.getAdress();
    } catch (SocketException e) {
      e.printStackTrace();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      // 關(guān)閉socket
      if(datagramSocket != null){
        datagramSocket.close();
      }
    }
  }
  
  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      new Thread(new Runnable() {
        @Override
        public void run() {
          UdpClient udpClient = new UdpClient();
        }
      }).start();
    }
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Idea調(diào)用WebService的關(guān)鍵步驟和注意事項

    Idea調(diào)用WebService的關(guān)鍵步驟和注意事項

    這篇文章主要介紹了如何在Idea中調(diào)用WebService,包括理解WebService的基本概念、獲取WSDL文件、閱讀和理解WSDL文件、選擇對接測試工具或方式、發(fā)送請求和接收響應(yīng)、處理響應(yīng)結(jié)果以及錯誤處理,需要的朋友可以參考下
    2025-01-01
  • 必須了解的高階JAVA枚舉特性!

    必須了解的高階JAVA枚舉特性!

    這篇文章主要介紹了必須了解的高階JAVA枚舉特性!幫助大家更好的理解和學(xué)習(xí)Java枚舉的相關(guān)知識,感興趣的朋友可以了解下
    2021-01-01
  • Spring Boot 表單驗證篇

    Spring Boot 表單驗證篇

    在表單提交的時候,我們需要進行驗證。下面通過本篇文章給大家介紹Spring Boot 表單驗證篇,需要的朋友可以參考下
    2017-08-08
  • java生成指定范圍隨機數(shù)的多種代碼

    java生成指定范圍隨機數(shù)的多種代碼

    今天在寫代碼的時候需要用到一個生成指定范圍隨機數(shù)的函數(shù),百度了一下,發(fā)現(xiàn)了很多種方法,這里簡單為大家整理一下,方便需要的朋友
    2017-08-08
  • SpringBoot集成ShardingSphere實現(xiàn)數(shù)據(jù)庫分表

    SpringBoot集成ShardingSphere實現(xiàn)數(shù)據(jù)庫分表

    ShardingSphere?是一個開源的分布式數(shù)據(jù)庫中間件,旨在為應(yīng)用提供數(shù)據(jù)庫分片、讀寫分離、分布式事務(wù)等功能,下面我們來看看SpringBoot如何集成ShardingSphere實現(xiàn)數(shù)據(jù)庫分表吧
    2024-12-12
  • 深入學(xué)習(xí)java中的Groovy 和 Scala 類

    深入學(xué)習(xí)java中的Groovy 和 Scala 類

    本文將探討三種下一代 JVM 語言:Groovy、Scala 和 Clojure,比較并對比新的功能和范例,讓 Java 開發(fā)人員對自己近期的未來發(fā)展有大體的認識。,需要的朋友可以參考下
    2019-06-06
  • 關(guān)于idea中SpringBoot啟動失敗的坑

    關(guān)于idea中SpringBoot啟動失敗的坑

    這篇文章主要介紹了關(guān)于idea中SpringBoot啟動失敗的坑,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • SpringMVC+Spring+Mybatis實現(xiàn)支付寶支付功能的示例代碼

    SpringMVC+Spring+Mybatis實現(xiàn)支付寶支付功能的示例代碼

    這篇文章主要介紹了SpringMVC+Spring+Mybatis實現(xiàn)支付寶支付功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    SpringBoot整合Thymeleaf與FreeMarker視圖層技術(shù)

    在目前的企業(yè)級應(yīng)用開發(fā)中,前后端分離是趨勢,但是視圖層技術(shù)還占有一席之地。Spring Boot 對視圖層技術(shù)提供了很好的支持,福安防推薦使用的模板引擎是Thymeleaf,不過想FreeMarker也支持,JSP技術(shù)在這里并不推薦使用
    2022-08-08
  • 一篇文章徹底理解SpringIOC、DI

    一篇文章徹底理解SpringIOC、DI

    這篇文章主要給大家介紹了關(guān)于對SpringIOC、DI的理解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論

高雄县| 密云县| 弥勒县| 新宁县| 军事| 滕州市| 昌图县| 分宜县| 琼海市| 天水市| 永泰县| 郁南县| 扶绥县| 雷州市| 西充县| 千阳县| 方山县| 巴彦淖尔市| 商河县| 资阳市| 札达县| 宣汉县| 天水市| 喜德县| 江油市| 嵩明县| 西华县| 尚志市| 报价| 加查县| 澄江县| 安义县| 晋州市| 聂荣县| 南郑县| 景德镇市| 襄樊市| 文水县| 五华县| 克山县| 龙川县|