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

下次自动登录
现在的位置:
& 综合 & 正文
android发送UDP广播及在PC上接受广播数据
android端,发送UDP广播包:
public class WifiBroadcastActivity extends Activity {
private static String LOG_TAG="WifiBroadcastActivity";
private boolean start =
private EditText IPA
public static final int DEFAULT_PORT = 43708;
private static final int MAX_DATA_PACKET_LENGTH = 40;
private byte[] buffer = new byte[MAX_DATA_PACKET_LENGTH];
Button startB
Button stopB
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IPAddress = (EditText) this.findViewById(R.id.address );
startButton = (Button) this.findViewById(R.id.start);
stopButton = (Button) this.findViewById(R.id.stop);
startButton.setEnabled(true);
stopButton.setEnabled(false);
address = getLocalIPAddress();
if( address != null ){
IPAddress.setText( address );
IPAddress.setText("Can not get IP address");
EditText numberEdit = (EditText) findViewById(R.id.number);
numberEdit.setText(number);
startButton.setOnClickListener( listener );
stopButton.setOnClickListener( listener );
private String number = getRandomNumber();
private View.OnClickListener listener = new View.OnClickListener() {
public void onClick(View v) {
if( v == startButton ){
new BroadCastUdp(number).start();
startButton.setEnabled( false );
stopButton.setEnabled(true);
}else if( v == stopButton ){
startButton.setEnabled(true);
stopButton.setEnabled(false);
private String getLocalIPAddress(){
for (Enumeration&NetworkInterface& en = NetworkInterface.getNetworkInterfaces();
en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration&InetAddress& enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
} catch (SocketException ex){
Log.e(LOG_TAG, ex.toString());
private String getRandomNumber(){
int num = new Random().nextInt(65536);
String numString = String.format("x", num);
return numS
public class BroadCastUdp extends Thread{
private String dataS
private DatagramSocket udpS
public BroadCastUdp( String dataString ) {
this.dataString = dataS
public void run(){
DatagramPacket dataPacket =
udpSocket = new DatagramSocket(DEFAULT_PORT );
dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);
byte[] data = dataString.getBytes();
dataPacket.setData( data );
dataPacket.setLength( data.length );
dataPacket.setPort( DEFAULT_PORT );
InetAddress broadcastA
broadcastAddr = InetAddress.getByName("255.255.255.255");
dataPacket.setAddress(broadcastAddr);
} catch (Exception e) {
Log.e(LOG_TAG, e.toString());
while( start ){
udpSocket.send(dataPacket);
sleep( 10 );
} catch(Exception e) {
Log.e(LOG_TAG, e.toString());
udpSocket.close();
PC端,接收UDP广播数据:
public class WifiListener {
private static DatagramSocket udpS
private static byte[] data = new byte[256];
private static DatagramPacket udpPacket = new DatagramPacket( data, 256 );
public static void main(String[] args) {
udpSocket = new DatagramSocket( 43708 );
} catch (SocketException e) {
System.out.println( e.toString());
while( true ){
udpSocket.receive(udpPacket);
} catch (Exception e) {
System.out.println( e.toString());
if( udpPacket.getLength() != 0 ){
String codeString = new String( data, 0, udpPacket.getLength() );
System.out.println( codeString );
原文地址:
【上篇】【下篇】android 平台接收不到udp广播包!
[问题点数:40分]
android 平台接收不到udp广播包!
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|android udp接收不到数据_百度知道
android udp接收不到数据
我一台手机发图片到电脑的服务端,再转发到另一台手机上。电脑开了wifi,所有都连在这上面
电脑ip:192.168.191.1
发图片手机:192.168.191.2
端口:6124
收图片手机:192.168.191.3
端口:6123
public class UDPImageServer {
private...
我有更好的答案
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. import java.io.IOE import java.net.DatagramP import java.net.DatagramS import java.net.InetA import java.net.MulticastS import java.net.SocketE import java.net.UnknownHostE import java.util.O import com.example.com.ihome.bang.tool.SendT import android.net.wifi.WifiM import android.util.L /** * * UdpHelper帮助类 * * @author 陈喆榕 * */ public class UdpHelper
implements Runnable {
Boolean IsThreadDisable =//指示监听线程是否终止
private static WifiManager.MulticastL
InetAddress mInetA
public UdpHelper(WifiManager manager) {
this.lock= manager.createMulticastLock(&UDPwifi&);
public void StartListen()
// UDP服务器监听的端口
Integer port = 8903;
// 接收的字节大小,客户端发送的数据不能超过这个大小
byte[] message = new byte[100];
// 建立Socket连接
DatagramSocket datagramSocket = new DatagramSocket(port);
datagramSocket.setBroadcast(true);
DatagramPacket datagramPacket = new DatagramPacket(message,
message.length);
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 =
s = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
InetAddress local =
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);
s.send(p);
s.close();
} catch (IOException e) {
e.printStackTrace();
public void run() {
StartListen();
} }希望能帮到你。
为您推荐:
其他类似问题
您可能关注的内容
android的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。19:29 提问
android真机使用UDP协议向PC机发送数据报,PC端的服务器接受不到
如题,代码如下:
android上的客户端,忽略了Activity部分
public class LocationClient {
private final String remoteIP;//外网IP
private final int PORT = 28888;
private final int PACKET_SIZE = 4096;
private DatagramSocket dS
private DatagramPacket inP
private DatagramPacket outP
public LocationClient(String remoteIP) {
this.remoteIP = remoteIP;
dSocket = new DatagramSocket();
} catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
inPacket = new DatagramPacket(new byte[PACKET_SIZE], PACKET_SIZE);
//处理remoteIP地址字符串
String[] remoteIPSplit = remoteIP.split("\\.");
byte[] remoteIPBuf = new byte[4];
for(int i = 0; i & 4; i++){
remoteIPBuf[i] = (byte)(Integer.parseInt(remoteIPSplit[i])&0xff);
outPacket = new DatagramPacket(new byte[PACKET_SIZE], 0,
PACKET_SIZE, InetAddress.getByAddress(remoteIPBuf), PORT);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
* 发送数据 MAX长度 = 4k
public void sendData(String content) {
outPacket.setData(content.getBytes());
dSocket.send(outPacket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public void close() {
dSocket.close();
PC机上的服务器:
import java.io.F
import java.io.FileNotFoundE
import java.io.IOE
import java.io.RandomAccessF
import java.net.DatagramP
import java.net.DatagramS
import java.net.InetA
import java.net.SocketE
import java.net.UnknownHostE
import javax.swing.filechooser.FileNameExtensionF
public class LocationServer {
private final int PORT = 28888;
private final int PACKET_SIZE = 4096;
private DatagramSocket dS
private DatagramPacket inP
private DatagramPacket outP
public LocationServer() {
dSocket = new DatagramSocket(PORT);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
inPacket = new DatagramPacket(new byte[PACKET_SIZE], PACKET_SIZE);
public void run(){
while(true){
System.out.println("~~~~~服务器启动~~~~~");
dSocket.receive(inPacket);
byte[] content = inPacket.getData();
System.out.println(String.valueOf(content));
new RecordManager(inPacket.getAddress().getHostAddress(), content).run();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
dSocket.close();
private class RecordManager implements Runnable{
private String fileN
private byte[] addC
public RecordManager(String fileName, byte[] addContent) {
this.fileName = fileN
this.addContent = addC
public void run() {
// TODO Auto-generated method stub
File file = new File(fileName);
try(RandomAccessFile rAccessFile = new RandomAccessFile(file, "w")){
//指针跳到末尾
rAccessFile.seek(file.length());
//追加内容
rAccessFile.write(addContent);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void main(String[] args){
new LocationServer().run();
按赞数排序
看下是不是防火墙拦截了,还是pc端的程序有问题,这种程序,不要一上来就写上一大段,先从基本的通讯写起,先保证连上,能传个字符也行,然后逐步完善。
建议你先在 PC端 使用TCP/UDP调试工具,看看能不能接收到数据?
如果不能,则说明是客户端发送的问题;如果能,说明是服务器端接收的问题。
1。确定二者在同一网络,或者他们即使不在同一网络但可以间接路由
2。关闭PC端防火墙
3。如果手机访问公网IP,需在路由器设置端口映射,同时需确保网络运营商没有封禁端口
首先抓包看有没有发出来
pc在 内网吧 也许。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐ul').hide()" onmouseenter="jQuery('.sitegroup>ul').show()">
绔嬪嵆鍏呭

我要回帖

更多关于 unity android sdk 的文章

 

随机推荐