欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android的UDP編程實例

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

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

2、在調(diào)用廣播發(fā)送、接收報文之前先調(diào)用lock.acquire()方法;
3、用完之后及時調(diào)用lock.release()釋放資源,否決多次調(diào)用lock.acquire()方法,程序可能會崩,詳情請見
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)過這樣處理后,多數(shù)手機都能正常發(fā)送接收到廣播報文。
本小點轉(zhuǎn)載自Android手機接收不到UDP報文
二、在UDP通信中,android端發(fā)送UDP廣播包沒有問題。至于接收的話,有時候不能接收到包。
在UDP通信中,android端發(fā)送UDP廣播包沒有問題。至于接收的話,有時候不能接收到包。但是如果UDP包中指定了目標(biāo)主機的地址的話,那么android端就能正常接收。
下面上一段代碼,大家可用這段代碼進行測試。
1、在一個Service里面,我們創(chuàng)建一個線程
復(fù)制代碼 代碼如下:

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

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

2、弄一個UDP幫助類,這個類主要用于發(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幫助類
 *
 * @author 陳喆榕
 *
 */
public class UdpHelper  implements Runnable {
    public    Boolean IsThreadDisable = false;//指示監(jiān)聽線程是否終止
    private static WifiManager.MulticastLock lock;
    InetAddress mInetAddress;
    public UdpHelper(WifiManager manager) {
         this.lock= manager.createMulticastLock("UDPwifi");
    }
    public void StartListen()  {
        // UDP服務(wù)器監(jiān)聽的端口
        Integer port = 8903;
        // 接收的字節(jié)大小,客戶端發(fā)送的數(shù)據(jù)不能超過這個大小
        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特效之水波紋的實現(xiàn)

    Android特效之水波紋的實現(xiàn)

    今天我們主要講一講如何通過自定義View(以下簡稱WaveView)實現(xiàn) "咻咻咻" 式的水波紋擴散效果,感興趣的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例

    RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例

    本篇文章主要介紹了RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Android實現(xiàn)注冊界面

    Android實現(xiàn)注冊界面

    這篇文章主要為大家詳細介紹了Android實現(xiàn)注冊界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android實現(xiàn)點擊縮略圖放大效果

    Android實現(xiàn)點擊縮略圖放大效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)點擊縮略圖放大效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android實現(xiàn)QQ側(cè)滑菜單效果

    Android實現(xiàn)QQ側(cè)滑菜單效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)QQ側(cè)滑菜單效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Kotlin協(xié)程低級api startCoroutine與ContinuationInterceptor

    Kotlin協(xié)程低級api startCoroutine與ContinuationInterceptor

    這篇文章主要為大家介紹了Kotlin協(xié)程低級api startCoroutine與ContinuationInterceptor示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Android使用元數(shù)據(jù)實現(xiàn)配置信息的傳遞方法詳細介紹

    Android使用元數(shù)據(jù)實現(xiàn)配置信息的傳遞方法詳細介紹

    這篇文章主要介紹了Android使用元數(shù)據(jù)實現(xiàn)配置信息的傳遞方法,也就是實現(xiàn)配置快捷菜單功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Android基于OpenCV實現(xiàn)圖像修復(fù)

    Android基于OpenCV實現(xiàn)圖像修復(fù)

    實際應(yīng)用中,圖像常常容易受損,如存在污漬的鏡頭、舊照片的劃痕、人為的涂畫(比如馬賽克),亦或是圖像本身的損壞。修復(fù)圖像就成為一個常見的需求了,本文講述Android基于OpenCV實現(xiàn)圖像修復(fù)的步驟,有此需求的朋友可以參考下
    2021-06-06
  • Android震動與提示音實現(xiàn)代碼

    Android震動與提示音實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android震動與提示音實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android利用ContentProvider獲取聯(lián)系人信息

    Android利用ContentProvider獲取聯(lián)系人信息

    這篇文章主要為大家詳細介紹了Android利用ContentProvider獲取聯(lián)系人信息,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論