androidudp,Androidudp组播只进一次

android:udp广播

首先手机作为终端 可以不必要知道终端的数量、 还有就是我建议你多学习下基础,android的广播机制不是把广播在终端之间传输,广播是在应用程序里面发送,在应用程序进行接收。个人建议基础才是王道。 对于你现在这个问题,不妨采用发送消息的方式 实现该功能。一个终端发送消息 其他终端接收消息,当然也相当于写一个socket通信。通信建立之后 ,可以取得各个连接的终端的IP 然后怎么逻辑就看你怎么写算法了。还有就是,这个功能也可以用消息推送的方式(建议采用此方法)、android系统内置有消息推送,逻辑都和上述的差不多,至于具体用那些方法 那些内置类,个人建议多查API。软件开发必须靠自学。。。。

公司主营业务:成都做网站、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出札达免费做网站回馈大家。

android接收不到udp包吗

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

Android 使用udp发送广播

最近做项目时,遇到一个对新人我来说稍微有点麻烦的事情!

那就是使用udp协议发送广播获取服务器地址!

http都好说,github开源项目不知道有多少。

可是再难的问题也要去解决!

发送广播需要权限!

AndroidManifest.xml 中添加:

最少这三个是必须的,多的也忘了!

原因后面会讲到

使用到RxJava:

udp发送与接受都需指定端口号

广播地址是255.255.255.255

在之前添加权限的时候CHANGE_WIFI_MULTICAST_STATE有添加这个

往下面看

接下来我们开启接收udp信息

发送消息?

谢谢该作者的文章让我学会udp发送

如何修正安卓虚拟机收不到udp包的问题

前言

当我们做安卓开发时,大多数人还是习惯用虚拟机,毕竟真机巴拉来巴拉去的不如鼠标方便,尤其是调试一些功能模块时,比如socket udp , 下文说明如何用as+虚拟机调试 socket udp, 实测

如何搭建udp服务器和客户端不提了,简单的搭建随便找一个吧

首先我们的前提是 我们在pc上建立了一个UDP服务器,目的是通过这服务器给虚拟机发送一个udp包

但如何发送这个包呢?

如果想当然的这样做在server上给"127.0.0.1:9014"发送包,然后在虚拟机的9014端口接受包,你会发现无论发多少次,虚拟机什么都收不到。 原因是,你这个包并不是发给虚拟机了,而是发给了本地端口,

也许你会说,给虚拟机发应该用虚拟机的ip地址,好的,通过尝试我们发现给虚拟机的ip地址+9014端口,仍然无法收到。(我用工具查看的虚拟机ip地址是10.0.2.15)

正确步骤

1.把PC端口9014映射到虚拟机,意思就是当PC 9014端口收到udp包,它会转发给虚拟机相应的端口

使用windows程序telnet即可达到映射的目的,(注意Telnet在win10需要开启,可查找怎么开启这个程序)

打开cmd 输入如下命令连接到本地虚拟机

telnet localhost 5554

连接成功后他会提示你输入验证,并告诉你验证码在哪里

android udp接收不到数据

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

}

}

希望能帮到你。


本文标题:androidudp,Androidudp组播只进一次
文章分享:http://scyanting.com/article/dseehge.html