最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android的UDP編程實(shí)例

 更新時(shí)間:2013年11月04日 16:43:52   作者:  
android的UDP編程實(shí)例和注意事項(xiàng)。
一、有的手機(jī)不能直接接收UDP包,可能是手機(jī)廠(chǎng)商在定制Rom的時(shí)候把這個(gè)功能給關(guān)掉了。
1、可先在oncreate()方法里面實(shí)例化一個(gè)WifiManager.MulticastLock 對(duì)象lock;具體如下:
復(fù)制代碼 代碼如下:

WifiManager manager = (WifiManager) this
                .getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock= manager.createMulticastLock("test wifi");

2、在調(diào)用廣播發(fā)送、接收?qǐng)?bào)文之前先調(diào)用lock.acquire()方法;
3、用完之后及時(shí)調(diào)用lock.release()釋放資源,否決多次調(diào)用lock.acquire()方法,程序可能會(huì)崩,詳情請(qǐng)見(jiàn)
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
注;記得在配置文件里面添加如下權(quán)限:
復(fù)制代碼 代碼如下:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

經(jīng)過(guò)這樣處理后,多數(shù)手機(jī)都能正常發(fā)送接收到廣播報(bào)文。
本小點(diǎn)轉(zhuǎn)載自Android手機(jī)接收不到UDP報(bào)文
二、在UDP通信中,android端發(fā)送UDP廣播包沒(méi)有問(wèn)題。至于接收的話(huà),有時(shí)候不能接收到包。
在UDP通信中,android端發(fā)送UDP廣播包沒(méi)有問(wèn)題。至于接收的話(huà),有時(shí)候不能接收到包。但是如果UDP包中指定了目標(biāo)主機(jī)的地址的話(huà),那么android端就能正常接收。
下面上一段代碼,大家可用這段代碼進(jìn)行測(cè)試。
1、在一個(gè)Service里面,我們創(chuàng)建一個(gè)線(xiàn)程
復(fù)制代碼 代碼如下:

public void onCreate() {//用于創(chuàng)建線(xiàn)程
        WifiManager manager = (WifiManager) this
                .getSystemService(Context.WIFI_SERVICE);
        udphelper = new UdpHelper(manager);

        //傳遞WifiManager對(duì)象,以便在UDPHelper類(lèi)里面使用MulticastLock
        udphelper.addObserver(MsgReceiveService.this);
        tReceived = new Thread(udphelper);
        tReceived.start();
        super.onCreate();
    }

2、弄一個(gè)UDP幫助類(lèi),這個(gè)類(lèi)主要用于發(fā)送和接收數(shù)據(jù)
復(fù)制代碼 代碼如下:

package com.example.com.ihome.bang.util;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Observable;
import com.example.com.ihome.bang.tool.SendThread;
import android.net.wifi.WifiManager;
import android.util.Log;
/**
 *
 * UdpHelper幫助類(lèi)
 *
 * @author 陳喆榕
 *
 */
public class UdpHelper  implements Runnable {
    public    Boolean IsThreadDisable = false;//指示監(jiān)聽(tīng)線(xiàn)程是否終止
    private static WifiManager.MulticastLock lock;
    InetAddress mInetAddress;
    public UdpHelper(WifiManager manager) {
         this.lock= manager.createMulticastLock("UDPwifi");
    }
    public void StartListen()  {
        // UDP服務(wù)器監(jiān)聽(tīng)的端口
        Integer port = 8903;
        // 接收的字節(jié)大小,客戶(hù)端發(fā)送的數(shù)據(jù)不能超過(guò)這個(gè)大小
        byte[] message = new byte[100];
        try {
            // 建立Socket連接
            DatagramSocket datagramSocket = new DatagramSocket(port);
            datagramSocket.setBroadcast(true);
            DatagramPacket datagramPacket = new DatagramPacket(message,
                    message.length);
            try {
                while (!IsThreadDisable) {
                    // 準(zhǔn)備接收數(shù)據(jù)
                    Log.d("UDP Demo", "準(zhǔn)備接受");
                     this.lock.acquire();

                    datagramSocket.receive(datagramPacket);
                    String strMsg=new String(datagramPacket.getData()).trim();
                    Log.d("UDP Demo", datagramPacket.getAddress()
                            .getHostAddress().toString()
                            + ":" +strMsg );this.lock.release();
                }
            } catch (IOException e) {//IOException
                e.printStackTrace();
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
    public static void send(String message) {
        message = (message == null ? "Hello IdeasAndroid!" : message);
        int server_port = 8904;
        Log.d("UDP Demo", "UDP發(fā)送數(shù)據(jù):"+message);
        DatagramSocket s = null;
        try {
            s = new DatagramSocket();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        InetAddress local = null;
        try {
            local = InetAddress.getByName("255.255.255.255");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        int msg_length = message.length();
        byte[] messageByte = message.getBytes();
        DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,
                server_port);
        try {
            s.send(p);
            s.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
            StartListen();
    }
}

相關(guān)文章

  • Android實(shí)現(xiàn)手繪功能

    Android實(shí)現(xiàn)手繪功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手繪功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android實(shí)現(xiàn)按鈕拖拽還原功能

    Android實(shí)現(xiàn)按鈕拖拽還原功能

    這篇文章主要介紹了Android按鈕拖拽還原功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Android 快速實(shí)現(xiàn)狀態(tài)欄透明樣式的示例代碼

    Android 快速實(shí)現(xiàn)狀態(tài)欄透明樣式的示例代碼

    下面小編就為大家分享一篇Android 快速實(shí)現(xiàn)狀態(tài)欄透明樣式的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android Native 內(nèi)存泄漏系統(tǒng)化解決方案

    Android Native 內(nèi)存泄漏系統(tǒng)化解決方案

    這篇文章主要介紹了Android Native 內(nèi)存泄漏系統(tǒng)化解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Android和JavaScript相互調(diào)用的方法

    Android和JavaScript相互調(diào)用的方法

    這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實(shí)例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪(fǎng)問(wèn)Android的技巧,需要的朋友可以參考下
    2015-12-12
  • 在Android中查看當(dāng)前Activity是否銷(xiāo)毀的操作

    在Android中查看當(dāng)前Activity是否銷(xiāo)毀的操作

    這篇文章主要介紹了在Android中查看當(dāng)前Activity是否銷(xiāo)毀的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Android識(shí)別NFC芯片制造商的方法

    Android識(shí)別NFC芯片制造商的方法

    這篇文章介紹了Android識(shí)別NFC芯片制造商的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • Android 解決WebView調(diào)用loadData()方法顯示亂碼的問(wèn)題

    Android 解決WebView調(diào)用loadData()方法顯示亂碼的問(wèn)題

    這篇文章主要介紹了Android 解決WebView調(diào)用loadData()方法顯示亂碼的問(wèn)題的相關(guān)資料,希望通過(guò)本文能幫助到大家解決這樣的問(wèn)題,需要的朋友可以參考下
    2017-09-09
  • Android動(dòng)效Compose貝塞爾曲線(xiàn)動(dòng)畫(huà)規(guī)格詳解

    Android動(dòng)效Compose貝塞爾曲線(xiàn)動(dòng)畫(huà)規(guī)格詳解

    這篇文章主要為大家介紹了Android動(dòng)效Compose貝塞爾曲線(xiàn)動(dòng)畫(huà)規(guī)格詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android自定義dialog可選擇展示年月日時(shí)間選擇欄

    Android自定義dialog可選擇展示年月日時(shí)間選擇欄

    這篇文章主要介紹了Android自定義dialog可選擇展示年月日時(shí)間選擇欄,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下
    2017-03-03

最新評(píng)論

宜良县| 丰镇市| 平罗县| 山西省| 江山市| 方城县| 高安市| 内江市| 手机| 北碚区| 佛坪县| 仲巴县| 澄江县| 施秉县| 资阳市| 浦江县| 前郭尔| 灵宝市| 城市| 株洲市| 九龙城区| 左云县| 天峨县| 静海县| 太湖县| 乌兰县| 长兴县| 定南县| 永善县| 和田县| 大同县| 鸡西市| 梅河口市| 南和县| 新丰县| 玉林市| 南皮县| 和龙市| 惠安县| 治县。| 德安县|