一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現udp通訊的代碼

java實現udp通訊的代碼

2021-06-01 12:16rising1234 Java教程

這篇文章主要為大家詳細介紹了java實現udp通訊的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

經過討論決定采用udp協議實現,upd是一種無連接的傳輸層協議。應用a在不知道應用b的 ip情況下 可以使用廣播地址255.255.255.255,將消息發送到在同一廣播網絡上的b。從而獲取b的ip。

實現代碼:

b應用為服務端:將udp監聽放到一個線程中,當有客戶端請求時就會進行響應

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 * udp連接,用于動態ip, pos向255.255.255.255:5060發送請求即可
 * **/
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("接收數據包" + 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線程出現異常:" + 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服務端已經啟動!");
    } catch (exception e) {
      datagramsocket = null;
      system.out.println("udp服務端啟動失敗!");
      e.printstacktrace();
    }
  }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/***
 * 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());
      
       //獲取服務端ip
      string serverip = recepacket.getadress();
    } catch (socketexception e) {
      e.printstacktrace();
    } catch (unknownhostexception e) {
      e.printstacktrace();
    } catch (ioexception e) {
      e.printstacktrace();
    } finally {
      // 關閉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();
    }
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/coderising/p/9689619.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 草莓视频首页 | 久久青青草原精品国产软件 | 激情艳妇 | 欧美另类性xxoo | 俺去啦最新 | 91.prom在线观看国产 | 日韩视频一区 | 91果冻制片厂天美传媒 | 久久99精品涩AV毛片观看 | 色交视频| 国产亚洲精品精品国产亚洲综合 | 任我行视频在线观看国语 | 亚洲国内精品 | 欧美日韩一级视频 | 国产成人精品午夜视频' | 亚洲第成色999久久网站 | 日本九九视频 | 亲爱的客栈第二季免费观看完整版 | 成人人免费夜夜视频观看 | 太紧太深了受不了黑人 | 热99精品视频 | 日本激情在线 | 国产欧美视频在线观看 | anal22日本人视频 | 日本道三区播放区 | 失禁尿丝袜vk| 亚洲成人aa| www.青青草原 | 免费看男人狂躁女人 | 久久精品国产免费播放 | 狠狠综合久久综合网站 | se婷婷| 亚洲 综合 欧美在线 热 | 美女脱小内内给男生摸j | 青春娱乐国产分类精品二 | 亚洲天堂精品在线 | 国产精品林美惠子在线观看 | 91免费在线 | free性丰满hd性欧美厨房 | 倩女还魂在线观看完整版免费 | 天天色天天舔 |