当前位置:首页 » 安卓系统 » android接收udp广播

android接收udp广播

发布时间: 2022-09-03 01:31:42

Ⅰ android udp通信需要什么权限

一、有的手机不能直接接收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;

/**
*
* UdpHelper帮助类
*
* @author 陈喆榕
*
*/
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 {
// 建立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();
}

Ⅱ unity发布android端UDP无法接受广播数据

socket TCP和UPD 的链接方式一样 只是将一个参数TCP改成UDP而已 UDP解析包的时候 和发送包的时候 一般都带有序号 保证包的顺序 TCP是有序发送的

Ⅲ android-Android udp接收不到组播,请问如何解决

这是因为在AP模式下,没有添加组播路由。你可以在AP模式下的时候,去查看一下wifi的信息,你会发现除了默认的ip之外,wifi上没有相应的组播路由

Ⅳ Android 手机上能通过DatagramSocket收到PC端的UDP广播吗

在PC端直接用tcp调试助手发送数据,我另一台电脑能收到的,但是android的却是有时可以收到有时收不到,平均几十次收到10次左右,丢包不可能这么严重吧。,android的代码如下,
ds = new DatagramSocket(1234, InetAddress.getByName(“192.168.1.3”));
dp = new DatagramPacket(content, content.length);
ds.receive(dp);
如果我在pc端发送绑定了IP的UDP数据包,android可以收到数据,但是PC端发送255的广播UDP,android就收不到了。。查了一些资料,说是要加入权限,加入以下的代码,但实测发现效果一样。

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

Ⅳ Android手机只开启Wifi,但是不连接任何一个路由器,能不能收到路由器转发的UDP广播数据包,如何现实

不可以,UDP虽然是无连接传输,但是它是指第四层(传输层)无连接。没有连接wifi是第一层(物理层)就没有连接,是不可能传输数据的。

Ⅵ android接收不到udp包吗

1、有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了。
2、在UDP通信中,android端发送UDP广播包没有问题。至于接收的话,有时候不能接收到包。

Ⅶ android wifi能进行udp的局域网广播吗,使用255.255.255.255这个地址~~~~

可以的,可以使用255.255.255.255进行广播

Ⅷ android udp包循环接收需要close 吗

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

热点内容
怎么把服务器的ip固定了 发布:2025-01-12 03:55:42 浏览:578
php服务器开发 发布:2025-01-12 03:55:35 浏览:672
软件自制编程 发布:2025-01-12 03:54:00 浏览:534
j2ee和java的区别 发布:2025-01-12 03:42:44 浏览:581
android6小米 发布:2025-01-12 03:38:35 浏览:85
redis与数据库 发布:2025-01-12 03:20:21 浏览:211
怎么升级安卓100 发布:2025-01-12 03:19:37 浏览:516
c语言倒数 发布:2025-01-12 03:14:37 浏览:929
如何免费激活移动电话卡安卓 发布:2025-01-12 03:10:27 浏览:89
2020凯越精英配置什么样 发布:2025-01-12 03:08:02 浏览:685