Java連載129-廣播數據包、網路編程總結

来源:https://www.cnblogs.com/ruigege0000/archive/2020/07/12/13289449.html
-Advertisement-
Play Games

一、廣播數據包 1.特性 這種通信類似於廣播,要想實現這個功能,需要使用特殊的IP地址,要想實現多播或者廣播通信的主機必須加入一個D類地址,D類地址的十進位表示範圍為224.0.0.0~239.255.255.255 需要使用的類是`java.net.MulticastSocket. 常用的構建方法 ...


一、廣播數據包

1.特性

  • 這種通信類似於廣播,要想實現這個功能,需要使用特殊的IP地址,要想實現多播或者廣播通信的主機必須加入一個D類地址,D類地址的十進位表示範圍為224.0.0.0~239.255.255.255
  • 需要使用的類是`java.net.MulticastSocket.
  • 常用的構建方法
    (1)MulticastSocket(int port) throws IOException
    創建一個多播套接字,並將其綁定到埠上。
    (2)MuticastSocket(SocketAddress bindaddr) throws IOException
    創建一個多播套接字,並將其綁定到一個指定套接字地址上。\
  • 常用的成員方法:
    (1)public void joinGroup(InetAddress mcastaddr)
    將多播套接字加入指定多播組。
    (2)public void leaveGroup(InetAddress mcastaddr)
    將多播套接字移出多播組。
    (3)public void setTimeToLive(int ttl) throws IOException
    設置在此MuticastSocket上發出的多播數據包的預設生存時間。\
  • ttl參數設置數據包最多可以跨過多少個網路:
    (1)ttl=0,數據包應該停留在本地主機;
    (2)ttl=1,數據包應該發送到本地區域網;
    (3)ttl=32,數據包應該發送到本站點的網路上;
    (4)ttl=64,數據包應該保留在本地區;
    (5)ttl=128,數據包應該保留在本大洲;
    (6)ttl=255,數據包應該可以發送到所有地方。\
  • 先寫一個發送端
package com.bjpowernode.java_learning;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class D129_1_BroadcastTest {
 public static void main(String[] args) {
  new D129_Broadcast().send();
 }
}
class D129_Broadcast {
 public void send() {
  String msg = "Hello,This is Broadcast Message";         //多播內容
  int port = 6666;
  InetAddress group = null;
  MulticastSocket ms = null;
  
  try {
   group = InetAddress.getByName("224.1.1.1");         //創建多播地址
   ms = new MulticastSocket(port);                     //創建多播套接字
   ms.joinGroup(group);                                //將套接字加入多播地址
   ms.setTimeToLive(1);                                //設置數據報發送範圍為本地
   DatagramPacket dp = new DatagramPacket(msg.getBytes(),msg.length(),group,port);//創建待發送的數據報
   ms.send(dp);                                        //發送數據報
  }catch(IOException e) {
   System.out.println(e);
  }finally {
   ms.close();                                         //關閉套接字
  }
  
 }
}
  • 再寫一個接收端的程式
package com.bjpowernode.java_learning;

import java.net.DatagramPacket;

public class D129_2_ReceiverTest {
 public static void main(String[] args) {
  new D129Receiver().receive();
 }
}
class D129Receiver{
 public void receive() {
  byte[] data = new byte[1024];                //數據緩存區
  int port = 6666;                             //多播埠號
  InetAddress group = null;
  MuticastSocket ms = null;
  
  try {
   group = InetAddress.getName("224.1.1.1"); //創建多播地址
   ms = new MulticastSocket(port);           //創建多播套接字
   ms.joinGroup(group);                      //將套接字加入到多播地址
   DatagramPacket dp = new DatagramPacket(data,data,length,group,port);
               //創建待接收的數據報
   ms.receive(dp);                           //接收數據報
   String msg = new String(dp.getData(),0,dp.getLength());
   System.out.println("接收到的數據廣播數據為:"+msg);
   
   
  }catch(IOException e) {
   System.out.println(e);
  }finally {
   ms.close();                               //關閉套接字
  }
 }
}
  • 首先是運行接收端,然後運行廣播端,廣播將發送“Hello,This is Broadcast Message",客戶端收到該消息後會將其列印出來。 129.1

總結:
(1)TCP和UDP之間的區別有哪些? TCP是面向連接的流傳輸控制協議,具有高可靠性,確保傳輸數據的正確性,有驗證重發機制,保證傳輸過去的數據不會出現丟失或者亂序的情況。
UDP是無連接的數據服務,不對數據的完整性進行檢查與修改,無需等待對方應答,會出現分組丟失,重覆,亂序的情況,但傳輸效率高,實時性很好,適用於區域網內部傳輸。報文協議頭簡單。
(2)Socket的網路編程過程簡述
首先是客戶端,首先創建一個Socket實例,利用構造方法,綁定要通信的地址和埠,然後通過套接字的I/O流進行通信,最後通信接收,調用成員方法close()來關閉Socket;
然後是伺服器端,首先建立一個ServerSocket實例,並使用構造方法來綁定本地IP地址以及埠號,用於監聽將會收到的TCP請求。然後做如下迴圈:調用成員方法accept()來獲取客戶端的連接,並且返回一個Socekt實例。為返回的Socket實例創建一個線程,並且使用返回的Socket實力的I\O流與客戶端通信;最後使用成員方法進行關閉。

三、源碼:

    • D129_1_BroadcastTest.java
    • D129_2_ReceiverTest.java
    • https://github.com/ruigege66/Java/blob/master/D129_1_BroadcastTest.java
    • https://github.com/ruigege66/Java/blob/master/D129_2_ReceiverTest.java
    • CSDN:https://blog.csdn.net/weixin_44630050
    • 博客園:https://www.cnblogs.com/ruigege0000/
    • 歡迎關註微信公眾號:傅里葉變換,個人賬號,僅用於技術交流,後臺回覆“禮包”獲取Java大數據學習視頻禮包
      127.59

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 描述Python的變數聲明,可覷其語言設計思路,實現更快地代碼閱讀。 變數聲明 C# public、protect、private、internal 明確指出適用範圍 (完全公開、子類可訪問、僅自己可訪問、程式集內可訪問) Python 有點神奇,沒有不能訪問的變數,一般通過“潛規則”暗示其私有性 ...
  • pyenv 簡介 pyenv 是 Python 版本管理工具。 pyenv 可以改變全局的 Python 版本,在系統中安裝多個版本的 Python, 設置目錄級別的 Python 版本,還能創建和管理 virtual python environments。 安裝 pyenv 安裝git:~]# ...
  • 一、記憶體模型及分區 JVM 分為堆區和棧區,還有方法區,初始化的對象放在堆裡面,引用放在棧裡面,class 類信息常量池(static 常量和 static 變數)等放在方法區。 1、棧(Stack-線程私有) 1.1 棧的結構是棧幀組成的,調用一個方法就壓入一幀,幀上面存儲局部變數表,操作數棧,方 ...
  • 一個整數類型的變數自身加 1 可以這樣寫: a = a + 1; 或者 a += 1; 不過,C語言還支持另外一種更加簡潔的寫法,就是: a++; 或者 ++a; 這種寫法叫做自加或自增,意思很明確,就是每次自身加 1。 相應的,也有a--和--a,它們叫做自減,表示自身減 1。 ++和--分別稱為 ...
  • 文章已托管到GitHub,大家可以去GitHub查看閱讀,歡迎老闆們前來Star! 搜索關註微信公眾號 碼出Offer 領取各種學習資料! 深度理解Spring IOC(控制反轉) 一、IOC概述 Inverse Of Controll即為控制反轉,簡稱IOC 。 簡單來說,IOC反轉了依賴關係的滿 ...
  • 【一、項目背景】 讓更多的人去學習html,以廣東科技學院的導航欄為例, 教大家怎麼去做一個橫向的導航欄。 【二、項目準備】 準備一個編程的軟體Dreamweaver,打開軟體點擊文件新建一個叫導航欄的項目,如下圖所示。 點擊確定之後,會彈出下圖。 【三、項目實施】 1. 在標簽裡面寫下一個框架: ...
  • 可能在synchronized關鍵字的實現原理中,你已經知道了它的底層是使用Monitor的相關指令來實現的,但是還不清楚Monitor的具體細節。本文將讓你徹底Monitor的底層實現原理。 管程 一個管程可以被認為是一個帶有特殊房間的建築,這個特殊房間只能被一個線程占用。這個房間包含很多數據和代 ...
  • 為什麼阿裡巴巴要禁用Executors創建線程池?看阿裡巴巴開發手冊併發編程這塊有一條:線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,通過源碼分析禁用的原因 一、線程池的定義 管理一組工作線程。通過線程池復用線程有以下幾點優點: 減少資源創建 ⇒ 減少 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...