Android广播接收器不工作:绑定失败,无法分配请求地址
作为一项任务,我正在尝试将android设备设置为从笔记本电脑上的python程序接收UDP广播 python发送方将每隔5秒通过广播发送一些数据,接收方将接收并显示数据。但是,android接收器无法接收数据。 我目前正在使用三星S3作为我的android设备进行测试 确定的一个主要错误是绑定失败,无法分配请求地址 下面是我在网上找到的修改过的代码 PYTHON发送器 ANDROID接收器代码Android广播接收器不工作:绑定失败,无法分配请求地址,android,python,sockets,udp,broadcast,Android,Python,Sockets,Udp,Broadcast,作为一项任务,我正在尝试将android设备设置为从笔记本电脑上的python程序接收UDP广播 python发送方将每隔5秒通过广播发送一些数据,接收方将接收并显示数据。但是,android接收器无法接收数据。 我目前正在使用三星S3作为我的android设备进行测试 确定的一个主要错误是绑定失败,无法分配请求地址 下面是我在网上找到的修改过的代码 PYTHON发送器 ANDROID接收器代码 您是否在应用程序的清单文件中添加了android.permission.CHANGE\u WIFI\
您是否在应用程序的清单文件中添加了android.permission.CHANGE\u WIFI\u MULTICAST\u状态?标题有误导性。这不是广播接收器,您正在尝试使用数据报套接字接收数据。是的,我这样做了!它仍然有同样的问题你允许通过防火墙的端口吗?
# Send UDP broadcast packets
port = 50001
import sys, time
from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
while 1:
data = repr(time.time()) + '\n'
print data
s.sendto(data, ('192.168.0.14', port))
time.sleep(5)
class receiveUDP implements Runnable {
final String[] text = new String[1];
final int server_port = 50001;
// create buffer
final byte[] message = new byte[1500];
final DatagramPacket p = new DatagramPacket(message, message.length);
public void run() {
DatagramSocket s = null;
while (true) {
try{
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock = wifi.createMulticastLock("Main");
lock.acquire();
s = new DatagramSocket(server_port, InetAddress.getByName("192.168.0.14"));
Log.d(MainActivity.class.getName(), "Created socket");
s.receive(p);
lock.release();
text[0] = new String(message, 0, p.getLength());
Log.d(MainActivity.class.getName(), "message:" + text[0]);
runOnUiThread(new Runnable() {
@Override
public void run() {
//Toast.makeText(context, "Received message: "+text[0], Toast.LENGTH_SHORT).show();
textResponse.setText(text[0]);
}
});
} catch (SocketException e) {
Log.e(MainActivity.class.getName(), "An unexpected error occurred", e);
} catch (IOException e) {
Log.e(MainActivity.class.getName(), "An unexpected error occurred", e);
} catch (SecurityException e) {
Log.e(MainActivity.class.getName(), "An unexpected error occurred", e);
} finally {
if (s != null) s.close();
Log.d(MainActivity.class.getName(), "Closing socket");
}
}
}
}