日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

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

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

如果僅僅是用于發(fā)送數(shù)據(jù)報的MulticastSocket對象,使用默認(rèn)地址,隨機端口即可。但如果創(chuàng)建接收用的MulticastSocket對象,則該MulticastSocket對象必須指定端口,否則發(fā)送方無法確定發(fā)送數(shù)據(jù)報的目標(biāo)端口。

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

多點廣播的工具類:

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;

//定義接收網(wǎng)絡(luò)數(shù)據(jù)的字符數(shù)組

byte[] inBuff = new byte[DATA_LEN];

//以指定字節(jié)數(shù)組創(chuàng)建準(zhǔn)備接受的DatagramPacket對象

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

//定義一個用于發(fā)送的DatagramPacket對象

private DatagramPacket outPacket = null;

private Handler handler;

//構(gòu)造器,初始化資源

public ComUtil(Handler handler) throws Exception

{

this.handler = handler;

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

socket = new MulticastSocket(BOADCAST_PORT);

broadcastAddress = InetAddress.getByName(BROADCAST_IP);

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

socket.joinGroup(broadcastAddress);

//設(shè)置本MultcastSocket發(fā)送的數(shù)據(jù)報將被送到本身

socket.setLoopbackMode(false);

//初始化發(fā)送用的DatagramSocket,它包含一個長度為0的字節(jié)數(shù)組

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

new ReadBroad().start();

}

//廣播消息的工具方法

public void broadCast(byte[] msg)

{

try

{

//將msg字符串轉(zhuǎn)換為字節(jié)數(shù)組

byte[] buff = msg;

//設(shè)置發(fā)送用的DatagramPacket里的字節(jié)數(shù)組

outPacket.setData(buff);

//發(fā)送數(shù)據(jù)

socket.send(outPacket);

}

catch (IOException e)

{

e.printStackTrace();

}

}

//持續(xù)讀取MulticastSocket的線程

class ReadBroad extends Thread

{

public void run()

{

while (true)

{

try

{

//讀取Socket中的數(shù)據(jù)

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();

}

}

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产aaaaa毛片 | 国产精品久久av | 日本免费观看视频 | 免费的一级黄色片 | 亚洲一区 中文字幕 | 久久久www免费人成人片 | 中文字幕一区电影 | 国产精品不卡一区二区三区 | av美女网站 | 精品国模一区二区三区 | 丰满人妻一区二区三区免费 | 国产熟女高潮视频 | 欧美黄色一级生活片 | 久艹视频在线观看 | 国产原创在线视频 | 狠狠干狠狠搞 | 免费看黄色片子 | 一区二区三区韩国 | 国产美女操 | 黄页网站免费在线观看 | 成人免费看片98 | 中文字幕第20页 | 二区三区免费 | 黄色1级片 | 一级成人黄色片 | 午夜在线观看视频网站 | 日韩成人欧美 | 国产超碰在线观看 | 青草成人免费视频 | 在线观看免费国产 | 强制高潮抽搐哭叫求饶h | 久草成人网 | 大地资源二中文在线影视免费观看 | 日韩人妻精品一区二区三区视频 | 国产三级一区 | 亚洲第九十九页 | 艳妇臀荡乳欲伦交换gif | 免费的毛片网站 | 青青草自拍视频 | 人妻在卧室被老板疯狂进入 | 天码人妻一区二区三区在线看 | 美女一级黄 | 超碰96在线 | 自偷自拍亚洲 | 网友自拍av| 中文字幕免费观看视频 | 亚洲av无码专区国产乱码不卡 | 日日插插| 看片久久| 女人脱了内裤趴开腿让男躁 | 成人免费福利视频 | 日韩欧美亚洲视频 | 亚洲啪啪av | 欧美韩日国产 | 性生活视频在线播放 | 揄拍成人国产精品视频 | 奇米狠狠777 | www.男人的天堂.com | 逼特逼在线视频 | 美女av免费 | 国产成人免费 | 性欧美精品男男 | 欧美乱妇18p| 在线观看麻豆 | 粗大的内捧猛烈进出 | 老熟女一区二区三区 | 中文字幕一区二区精品 | 成人手机看片 | 青春草免费视频 | 伊人久久亚洲 | 91视频99 | 亚洲经典久久 | 欧美视频91| 国产又大又硬又粗 | 国产爆乳无码一区二区麻豆 | 裸体男女树林做爰 | 中日韩午夜理伦电影免费 | av网站在线看 | 欧美日韩一区二区三区四区五区 | 蜜臀av免费在线观看 | 日韩亚洲影院 | 综合一区二区三区 | 欧美一级黄色片网站 | 精品国产第一页 | 欧美黑人xxxⅹ高潮交 | 国产伊人网 | 国产午夜精品一区二区三区 | 国产老妇伦国产熟女老妇视频 | 天天看夜夜 | 日韩欧美午夜 | 在线看日本 | 丰满双乳秘书被老板狂揉捏 | 无码 人妻 在线 视频 | 激情五月综合色婷婷一区二区 | 污片免费在线观看 | 999一区二区三区 | 国产xxx在线 | 激情视频激情小说 | 国产盗摄精品一区二区酒店 |