1. 程式人生 > >五、Android區域網多播(組播)

五、Android區域網多播(組播)

多播

組播使用UDP對一定範圍內的地址傳送相同的一組Packet,即一次可以向多個接受者發出資訊,其與單播的主要區別是地址的形式。IP協議分配了一定範圍的地址空間給多播(多播只能使用這個範圍內的IP),IPv4中組播地址範圍為224.0.0.0到239.255.255.255

傳送端

package com.turing.mobilecontrol;

import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.InetAddress;
import
java.net.MulticastSocket; import java.net.Socket; import java.net.UnknownHostException; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; public class MobileSocketClient { private static MobileSocketClient mobileSocketClient = null; private static String BROADCAST_IP = "224.0.0.1"
; private static int BROADCAST_PORT = 9898; private static final String TAG = "MobileSocketClient"; private MulticastSocket multicastSocket; private InetAddress inetAddress; private Handler handler; private MobileSocketClient() { try { //初始化組播 inetAddress = InetAddress.getByName(BROADCAST_IP); multicastSocket = new
MulticastSocket(BROADCAST_PORT); multicastSocket.setTimeToLive(1); multicastSocket.joinGroup(inetAddress); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void init(Handler handler) { this.handler = handler; } public static MobileSocketClient getInstance() { if (mobileSocketClient == null) { mobileSocketClient = new MobileSocketClient(); } return mobileSocketClient; } //傳送資料 public void send(final String content) { new AsyncTask<String, Integer, String>() { @Override protected String doInBackground(String... paramVarArgs) { byte[] data = paramVarArgs[0].getBytes(); //構造要傳送的資料 DatagramPacket dataPacket = new DatagramPacket(data, data.length, inetAddress, BROADCAST_PORT); try { multicastSocket.send(dataPacket); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return App.getInstance().getResources() .getString(R.string.send_failed); } return App.getInstance().getResources() .getString(R.string.send_success); } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); Message msg = new Message(); msg.what = TuringHandler.STATUS; msg.obj = result; handler.sendMessage(msg); } }.execute(content); } }

接收端

package com.tuling.demo.socket;

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

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.tuling.demo.TuringHandler;

public class ServerSocket extends Thread {
    private static final String TAG = TuringServerSocket.class.getSimpleName()
            .toString();
    private static int BROADCAST_PORT = 9898;
    private static final String BROADCAST_IP = "224.0.0.1";
    private MulticastSocket multicastSocket;
    String content = "";
    private Handler handler;
    private InetAddress inetAddress;

    public TuringServerSocket(Handler handler) throws IOException {
        // 多播配置
        multicastSocket = new MulticastSocket(BROADCAST_PORT);
        inetAddress = InetAddress.getByName(BROADCAST_IP);
        multicastSocket.joinGroup(inetAddress);
        // handler
        this.handler = handler;
    }

    @Override
    public void run() {
        while (true) {
            Log.d(TAG, "run");
            byte buf[] = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf, buf.length,
                    inetAddress, BROADCAST_PORT);
            try {
                multicastSocket.receive(dp);
                String content = new String(buf, 0, dp.getLength());
                Message msg = new Message();
                msg.what = TuringHandler.RECEIVE_COMMOND;
                msg.obj = content;
                handler.sendMessage(msg);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

    }
}

相關推薦

Android區域網()

多播 組播使用UDP對一定範圍內的地址傳送相同的一組Packet,即一次可以向多個接受者發出資訊,其與單播的主要區別是地址的形式。IP協議分配了一定範圍的地址空間給多播(多播只能使用這個範圍內的IP),IPv4中組播地址範圍為224.0.0.0到239.

android multicast ()問題

有誰遇到過同樣問題的可以探討下,或者已經解決問題的,能夠指導下我    獲取組播鎖 private  InetAddress   group;    WifiManager  wm=(WifiMan

()原理分析

 為什麼要使用多播:        網卡從網路上接收到目標實體地址對應的所有bit位都為1的資料報時,會收到這條訊息並將其上傳給驅動程式,網絡卡的這種工作模式稱為廣播模式,網絡卡的預設工作模式包含直接模式和廣播模式。利用這一特性,UDP(使用者資料報協議)還提供了向多個目標

ZStack單廣播具體操作與原理資料整理

// Register the endpoint description with the AF afRegister( &GenericApp_epDesc ); 3.在需要傳送資料的地方,執行如下程式碼: if ( AF_DataRequest( &GenericApp_DstAddr,

三十java學習--執行緒程式設計

Java 多執行緒程式設計 Java 給多執行緒程式設計提供了內建的支援。 一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。 多執行緒是多工的一種特別的形式,但多執行緒使用了更小的資源開銷。 這裡定義和執行緒相關的

Android安全機制之反編譯(你也可以擁有iPhone X)

    Android應用的反編譯需要了解smali,熟練使用常用的反編譯工具。比如apktool,Jd-jui,dex2jar,Android逆向助手,AXMLPrinter2,jadx,Xposed,IDA,APK改之理,AndroidKiller以及一些adb、aapt

linux udp 單 廣播實現

前面介紹的TCP/IP知識都是基於單播,即一對一的方式,本節介紹一對多的廣播方式。廣播是由一個主機發向一個網路上所有主機的操作方式。例如在一個區域網內進行廣播,同一子網內的所有主機都可以收到此廣播發送的資料。 11.2.1 廣播的IP地址 要使用廣播,需要了解IPv4特定的廣播

廣播

交換機 電子 orm 數據流 優點 網上 size qos 電視機 組播=多播 單播、組播、廣播是網絡中結點的3種通訊方式。 1、單播 1)定義: 主機之間一對一的通訊模式。網絡中的交換機和路由器對數據只轉發,不復制。網絡中的路由器和交換機根據目標地址選擇傳輸路徑。

淺談Android中的()

-1 ip協議 strong 多個 接受 端口 ui線程 nbsp 數據 組播使用UDP對一定範圍內的地址發送相同的一組Packet,即一次可以向多個接受者發出信息,其與單播的主要區別是地址的形式。IP協議分配了一定範圍的地址空間給多播(多播只能使用這個範圍內

)和廣播的區別

本文來自百度文庫的一篇文件,放在部落格供自己和各位朋友學習和了解 單播”(Unicast)、“多播”(Multicast)和“廣播”(Broadcast)這三個術語都是用來描述網路節點之間通訊方式的術語。那麼這些術語究竟是什麼意思?區別何在?    1.單播:網路節點之間的通

Java UDP 單廣播(未實現)

單播、組播、廣播、任播的定義 單播(unicast): 是指封包在計算機網路的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網路應用最為廣泛,通常所使用的網路協議或服務大多采用單播傳輸,例如一切基於TCP的協議。 組播(multicast

MAC地址(單廣播數據收發)

制造商 局域網 對比 地址 方式 傳輸 eid type 但是 MAC地址 網絡設備的MAC地址是全球唯一的。MAC地址長度為48比特,通常用十六進制表示。MAC地址包含兩部分:前24比特是組織唯一標識符(OUI,OrganizationallyUniqueIdent

(),廣播以及任

pac 視頻 rsvp 使用 blank 缺點 ron ssa 處理 目錄 [+] 單播(unicast): 是指封包在計算機網絡的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網絡應用最為廣泛,通常所使用的網絡協議或服務大多采用單播傳輸,例如一切基於TCP的協議

鏈路內和鏈路外的數據包發送:單

存在 sse ast 比特 inf 正常 ip組播 nan root 翻譯自:https://info.menandmice.com/blog/bid/103274/On-link-vs-Off-Link-Packet-Delivery-Unicast-Multicast-

網路基本概念之TCP, UDP, 單(Unicast), )(Multicast)

這篇文章相當低階,但相當重要! 我們周圍一切幾乎都依賴於把事情抽象成低等級,並在某一點把它具體化,在一些設計概念中,介面層十分清晰並且目標很集中,應用程式不用考慮作業系統如何工作,作業系統也不用考慮硬體如何工作,OSI模型的第4層不需要考慮第三層如何工作。所以我們只需要集中精力在某一

java 實現區域網

要想用java程式設計實現傳送多播資訊,需要經歷幾個基本的程式設計步驟。能完成以下這幾步,就是可以用Java程式來實現多播資訊的傳送。  (1)確定傳送訊息的具體內容;    String msg="hello";  

Android實現MP4邊下邊(邊快取邊播放線上播放)原理與程式碼

QQ群交流:425219113(計算機語言交流) 邊下邊播方法初試 **剛開始實現這個的時候,我第一下想到的是:**先將MP4檔案單純的從位元組的層次分為若干個檔案,然後播放的時候,不斷從伺服器一邊下載,一邊追加到一個原始檔裡面,最後直接播放這個原始檔就可

WIFI專案--【Java TCP/IP Socket】 — 單廣播

在當前網路通訊中(TCP/IP也不例外)有三種通訊模式:單播、廣播、組播(又叫多播, 個人感覺叫多播描述的有點不恰當),其中多播出現的時間最晚,但同時具備單播和廣播的優點,最具有發展前景。 通訊方式分類: 1.單播:單臺主機與單臺主機之間的通訊;

) 廣播區分

單播 多播(組播) 廣播 Mac地址區分: 1.6個位元組全F廣播地址:FFFF-FFFF-FFFF 2.首個位元組低4位為奇數表示為組播地址:71XX-XXXX-XXXX,一般可通過mac_addr[0]&x01 來區分 3.除上述1、2以外的,為單播MAC地址

WinSock2 IP)示例

#include <winsock2.h>#include <ws2tcpip.h> #include <stdio.h>#include <stdlib.h> #pragma comment( lib, "ws2_32.lib" ) #define MCAST