Java Android UDP不';在某些设备中无法接收
我有一个UDP发送和接收,它在我的设备三星Galaxy Ace Plus(S7500)中工作,但相同的代码在其他设备中不工作,例如三星Galaxy S4。我没有任何错误 发送:Java Android UDP不';在某些设备中无法接收,java,android,multithreading,udp,send,Java,Android,Multithreading,Udp,Send,我有一个UDP发送和接收,它在我的设备三星Galaxy Ace Plus(S7500)中工作,但相同的代码在其他设备中不工作,例如三星Galaxy S4。我没有任何错误 发送: public class SendThread extends Thread { byte[] receiveData = new byte[1024]; DatagramSocket serverSocket = null; public SendThread() { this.start(); } p
public class SendThread extends Thread {
byte[] receiveData = new byte[1024];
DatagramSocket serverSocket = null;
public SendThread() {
this.start();
}
public void run() {
DatagramSocket serverSocket = null;
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
try {
serverSocket = new DatagramSocket("MY SOCKET PORT");
InetAddress IP = InetAddress.getByName("MY IP");
String send= "I am Android";
sendData = send.getBytes();
DatagramPacket send = new DatagramPacket(sendData, sendData.length, IP, "MY SEND PORT");
serverSocket.send(send);
serverSocket.close();
} catch (Exception e) {
}
}
}
收到:
public class ReceiveThread extends Thread {
byte[] receiveData = new byte[1024];
DatagramSocket serverSocket = null;
boolean isActive = true;
public ReceiveThread() {
this.start();
}
public void run() {
DatagramSocket serverSocket = null;
byte[] receiveData = new byte[1024];
while (isActive) {
try {
serverSocket = new DatagramSocket("MY RECEIVE PORT");
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
serverSocket.close();
} catch (Exception e){
}
}
}
}出现此问题是因为某些设备锁定了数据报接收器,因为协议安全由工厂实施 您的代码没有错,但是您需要更改多播套接字的DatagramSocket 为此,您需要执行以下步骤: 首先,需要添加使用权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
第三,用多播套接字替换DatagramSocket。仅在接收方法上需要输入以下代码或类似代码:
MulticastSocket ms = new MulticastScoket("Your socket port");
ms.joinGroup("Your IP");
发送消息不需要任何修改
我使用的multcast ip等于239.255.255.255。尝试删除多播ip的范围,因为错误的ip将正确阻止方法流
最后,在使用MulticastSocket之前,需要执行MulticastLock.acquire()
,在使用之后执行MulticastLock.release()
它可以投入服务,并在启动或停止服务时获取或释放多播锁
MulticastSocket ms = new MulticastScoket("Your socket port");
ms.joinGroup("Your IP");