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

1、廣播數據包

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流與客戶端通訊;最後使用成員方法進行關閉。java

3、源碼:

    • 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
相關文章
相關標籤/搜索