返回顶部
首页 > 资讯 > 移动开发 >android的UDP编程实例
  • 696
分享到

android的UDP编程实例

udpAndroid 2022-06-06 10:06:21 696人浏览 薄情痞子
摘要

一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。1、可先在oncreate()方法里面实例化一个WifiManager.Multicast

一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。
1、可先在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock;具体如下:
代码如下:
WifiManager manager = (WifiManager) this
                .getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock= manager.createMulticastLock("test wifi");

2、在调用广播发送、接收报文之前先调用lock.acquire()方法;
3、用完之后及时调用lock.release()释放资源,否决多次调用lock.acquire()方法,程序可能会崩,详情请见
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
注;记得在配置文件里面添加如下权限:
代码如下:
<uses-permission Android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

经过这样处理后,多数手机都能正常发送接收到广播报文。
本小点转载自Android手机接收不到UDP报文
二、在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。
在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。但是如果UDP包中指定了目标主机的地址的话,那么android端就能正常接收。
下面上一段代码,大家可用这段代码进行测试
1、在一个Service里面,我们创建一个线程
代码如下:
public void onCreate() {//用于创建线程
        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帮助类,这个类主要用于发送和接收数据
代码如下:
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;

public class UdpHelper  implements Runnable {
    public    Boolean IsThreadDisable = false;//指示监听线程是否终止
    private static WifiManager.MulticastLock lock;
    InetAddress mInetAddress;
    public UdpHelper(WifiManager manager) {
         this.lock= manager.createMulticastLock("UDPwifi");
    }
    public void StartListen()  {
        // UDP服务器监听的端口
        Integer port = 8903;
        // 接收的字节大小,客户端发送的数据不能超过这个大小
        byte[] message = new byte[100];
        try {
        &nbs p;   // 建立Socket连接
            DatagramSocket datagramSocket = new DatagramSocket(port);
            datagramSocket.setBroadcast(true);
            DatagramPacket datagramPacket = new DatagramPacket(message,
                    message.length);
            try {
                while (!IsThreadDisable) {
                    // 准备接收数据
                    Log.d("UDP Demo", "准备接受");
                     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发送数据:"+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();
    }
}
您可能感兴趣的文章:Android实现tcp断点上传 后台C#服务接收Android使用socket创建简单TCP连接的方法Android实现TCP客户端接收数据的方法Android编程实现TCP客户端的方法Android编程使用Http协议与TCP协议实现上传文件的方法Android中使用tcpdump、wireshark进行抓包并分析技术介绍Android中实现TCP和UDP传输实例Android下使用TCPDUMP实现数据抓包教程Android TCP 文件客户端与服务器DEMO介绍Android网络编程之UDP通信模型实例Android编程实现TCP、UDP客户端通信功能示例


--结束END--

本文标题: android的UDP编程实例

本文链接: https://lsjlt.com/news/27284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • android的UDP编程实例
    一、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。1、可先在oncreate()方法里面实例化一个WifiManager.Multicast...
    99+
    2022-06-06
    udp Android
  • Android编程实现简单的UDP Client实例
    本文实例讲述了Android编程实现简单的UDP Client。分享给大家供大家参考,具体如下: 该代码在4.2.2内调试通过 1.记得加权限 <uses-permis...
    99+
    2022-06-06
    udp Android
  • Android网络编程之UDP通信模型实例
    什么是Android UDP? UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单...
    99+
    2022-06-06
    模型 udp Android
  • android开发socket编程之udp发送实例分析
    本文实例讲述了android开发socket编程之udp发送实现方法。分享给大家供大家参考。具体分析如下: 需要实现的功能:采用udp下的socket编程,当按下确认键,模拟器...
    99+
    2022-06-06
    udp socket Android
  • linux系统下udp编程实例
    以下是一个简单的UDP编程实例,用于在Linux系统上发送和接收UDP数据包。```c#include #include #incl...
    99+
    2023-09-20
    Linux
  • udp编程的示例分析
    小编给大家分享一下udp编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是UDPUDP是User Datagram Protocol(用户数据报协...
    99+
    2023-06-27
  • Android编程实现TCP、UDP客户端通信功能示例
    本文实例讲述了Android编程实现TCP、UDP客户端通信功能。分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下...
    99+
    2022-06-06
    示例 udp 通信 Android
  • JavaSocket实现UDP编程浅析
    目录一、概述二、服务器端三、客户端四、总结一、概述 在 Java 中使用 UDP 编程,仍然需要使用 Socket ,因为应用程序在使用 UDP 时必须指定网络接口 ( IP地址 )...
    99+
    2022-11-13
    Java UDP编程 Java UDP Java Socket UDP
  • Android中实现TCP和UDP传输实例
    TCP和UDP在网络传输中非常重要,在Android开发中同样重要。 首先我们来看一下什么是TCP和UDP。 什么是TCP? TCP:Transmission Control ...
    99+
    2022-06-06
    udp传输 udp Android
  • Python的Socket编程过程中实现UDP端口复用的实例分享
    关于端口复用 一个套接字不能同时绑定多个端口,如果客户端想绑定端口号,一定要调用发送信息函数之前绑定( bind )端口,因为在发送信息函数( sendto, 或 write ),系统会自动给当前网络程序分...
    99+
    2022-06-04
    端口 过程中 复用
  • Java实现基于UDP协议的网络通信UDP编程
    目录UDP编程通信基本介绍基本流程UDP编程通信 基本介绍 类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。UDP数据报通...
    99+
    2023-05-17
    Java UDP编程 Java UDP网络编程
  • 网络编程—udp
    一、ip地址 1. 什么是地址 地址就是用来标记地点的   2. ip地址的作用 ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。   3. ip地址的分类 每一个IP地址包括两部分:网络地址和主机...
    99+
    2023-01-31
    网络编程 udp
  • Python 14.3 UDP编程
    UDP编程TCP是建立可靠连接,并且通信双方都可以以流的方式的发送数据。相对TCP,UDP则是面向无连接的协议。使用UDP时不需要建立连接,只需要知道对方的IP地址和端口号。就可以直接发送数据包。但是能不能到达就不知道了。虽然UDP传输数据...
    99+
    2023-01-31
    Python UDP
  • Java Socket如何实现UDP编程
    这篇文章主要讲解了“Java Socket如何实现UDP编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Socket如何实现UDP编程”吧!一、概述在 Jav...
    99+
    2023-07-04
  • android编程之ip2id程序实例
    本文实例讲述了android编程之ip2id程序。分享给大家供大家参考。具体分析如下: 一、说明: 公司一个项目中需要给一系列网络设备分配id号,id是根据ip算出来的,算法如...
    99+
    2022-06-06
    ip Android
  • android编程之多线程编程实例分析
    本文实例讲述了android编程之多线程编程实现方法。分享给大家供大家参考。具体分析如下: 该功能与前面《android开发socket编程之udp发送实例分析》中一样,当按下...
    99+
    2022-06-06
    程之 多线程编程 多线程 线程 Android
  • UDP服务器客户端编程流程的示例分析
    这篇文章给大家分享的是有关UDP服务器客户端编程流程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。UDP编程流程UDP提供的是无连接、不可靠的、数据报服务UDP是尽最大能力进行传输,但是并不能保证可靠性...
    99+
    2023-06-21
  • python3--socket编程(udp协议)
    基于UDP协议的socketudp是无连接的,启动服务之后可以直接接受消息,不需要提前建立连接,UDP必须是server端先接受消息简单版server端代码import socket # 创建一个服务器的套接字基于ud...
    99+
    2023-01-30
    协议 socket udp
  • Android传感器编程带实例
      一、前言   我很喜欢电脑,可是笔记本还是太大,笔记本电脑再小还是要弄个小包背起来的,智能手机则不同,它完全是一个手机,可以随意装在一个口袋里随身携带。因此我在20...
    99+
    2022-06-06
    Android
  • Android编程之SurfaceView实例详解
    本文实例讲述了Android编程之SurfaceView用法。分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别:...
    99+
    2022-06-06
    surfaceview Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作