日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android如何设置多条广播,Android使用MulticastSocket实现多点广播图片

發布時間:2025/3/20 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android如何设置多条广播,Android使用MulticastSocket实现多点广播图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DatagramSocket只允許數據報發送給指定的目標地址,而MulticastSocket可以將數據報以廣播的方式發送至多個客戶端。其主要思想是設置一組特殊網絡地址作為多點廣播地址,每個多點廣播地址都被看做一個組,當客戶端需要發送,接收廣播消息時,加入到該組即可。

IP協議為多點廣播提供了這些特殊的IP地址,這些IP地址的范圍是224.0.0.0至239.255.255.255。當MulticastSocket把一個DatagramPacket發送到多點廣播IP地址時,該數據將被自動廣播到加入該地址的所有MulticastSocket,同時也可以設置該MulticastSocket接收自身發送的數據。

如果僅僅是用于發送數據報的MulticastSocket對象,使用默認地址,隨機端口即可。但如果創建接收用的MulticastSocket對象,則該MulticastSocket對象必須指定端口,否則發送方無法確定發送數據報的目標端口。

下面通過一個簡單的例子實現多點廣播圖片:

多點廣播的工具類:

public class ComUtil

{

public static final String BROADCAST_IP = "224.2.2.2";

public static final int BOADCAST_PORT = 30000;

private static final int DATA_LEN = 100 * 1024;

//定義本程序的MulticastSocket實例

private MulticastSocket socket = null;

//定義廣播的IP地址

private InetAddress broadcastAddress = null;

//定義接收網絡數據的字符數組

byte[] inBuff = new byte[DATA_LEN];

//以指定字節數組創建準備接受的DatagramPacket對象

private DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length);

//定義一個用于發送的DatagramPacket對象

private DatagramPacket outPacket = null;

private Handler handler;

//構造器,初始化資源

public ComUtil(Handler handler) throws Exception

{

this.handler = handler;

//因為該MultcastSocket對象需要接受數據,所以有指定端口

socket = new MulticastSocket(BOADCAST_PORT);

broadcastAddress = InetAddress.getByName(BROADCAST_IP);

//將該socket加入指定的多點廣播地址

socket.joinGroup(broadcastAddress);

//設置本MultcastSocket發送的數據報將被送到本身

socket.setLoopbackMode(false);

//初始化發送用的DatagramSocket,它包含一個長度為0的字節數組

outPacket = new DatagramPacket(new byte[0] , 0 , broadcastAddress , BOADCAST_PORT);

new ReadBroad().start();

}

//廣播消息的工具方法

public void broadCast(byte[] msg)

{

try

{

//將msg字符串轉換為字節數組

byte[] buff = msg;

//設置發送用的DatagramPacket里的字節數組

outPacket.setData(buff);

//發送數據

socket.send(outPacket);

}

catch (IOException e)

{

e.printStackTrace();

}

}

//持續讀取MulticastSocket的線程

class ReadBroad extends Thread

{

public void run()

{

while (true)

{

try

{

//讀取Socket中的數據

socket.receive(inPacket);

Message msg = new Message();

msg.what = 0x123;

msg.obj = inBuff;

handler.sendMessage(msg);

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

}

MainActivity類:

public class MainActivity extends Activity

{

private Button button;

private ImageView img;

private ComUtil comUitl;

Handler handler = new Handler()

{

@Override

public void handleMessage(Message msg)

{

if (msg.what == 0x123)

{

byte[] result = (byte[]) msg.obj;

img.setImageBitmap(BitmapFactory.decodeByteArray(result , 0 , result.length));

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main_activity);

try

{

comUitl = new ComUtil(handler);

}

catch (Exception e)

{

e.printStackTrace();

}

button = (Button) findViewById(R.id.send_img_all);

img = (ImageView) findViewById(R.id.receiver_img);

button.setOnClickListener(new View.OnClickListener()

{

@Override

public void onClick(View view)

{

sendData();

}

});

}

private void sendData()

{

Bitmap bitmap = BitmapFactory.decodeResource(getResources() , R.drawable.wenqing2);

ByteArrayOutputStream byteArray = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG , 100 , byteArray);

bitmap.recycle();

final byte[] msg = byteArray.toByteArray();

new Thread()

{

@Override

public void run()

{

comUitl.broadCast(msg);

}

}.start();

try

{

byteArray.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

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

總結

以上是生活随笔為你收集整理的android如何设置多条广播,Android使用MulticastSocket实现多点广播图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。