Android 端口80上的多播套接字

Android 端口80上的多播套接字,android,ioexception,multicastsocket,Android,Ioexception,Multicastsocket,我想创建一个网络应用程序,其中一些设备必须向另一个设备发送数据包。这个设备是安卓的。我的想法是把信息广播到网络上,这样设备就可以得到它。我在互联网上查过,我发现一个解决方案可能是多播套接字。我遵循了javadoc的教程,这非常简单。我在我的安卓手机和一台电脑上做了这件事。我现在的问题是,我希望这个套接字绑定到端口80上。实际上,当我尝试创建套接字时,我会得到一个错误,更准确地说是一个EACCES。以下是我的服务器的代码: public class MyServer extends Thread

我想创建一个网络应用程序,其中一些设备必须向另一个设备发送数据包。这个设备是安卓的。我的想法是把信息广播到网络上,这样设备就可以得到它。我在互联网上查过,我发现一个解决方案可能是多播套接字。我遵循了javadoc的教程,这非常简单。我在我的安卓手机和一台电脑上做了这件事。我现在的问题是,我希望这个套接字绑定到端口80上。实际上,当我尝试创建套接字时,我会得到一个错误,更准确地说是一个EACCES。以下是我的服务器的代码:

public class MyServer extends Thread {

private int port;
private boolean isRunning = true;
private MulticastSocket socket;
private InetAddress group;

public MyServer(int port) {
    this.port = port;
    isRunning = true;
}

public void run() {
    socket = null;
    try {
        socket = new MulticastSocket(80);
        group = InetAddress.getByName("coucou");
        socket.joinGroup(group);
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }


    while (isRunning) {
        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
        try {
            socket.receive(packet);
            Log.i("Server", "Packet received");
            MyCipher rec = new MyCipher(Arrays.copyOfRange(packet.getData(), 0, packet.getLength()));
            Receiver.getInstance().put(rec);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    socket.close();
}

public void mustStop() {
    this.notify();
    isRunning = false;
}
}

有人知道如何修复它吗?此外,是否有人知道组的名称必须是服务器的ip,或者可能是“随机”字符串


谢谢大家!

我相信这意味着您需要根权限才能在小于1024的端口上绑定。我不能完全肯定这一点,但Android是Linux,Linux在这些方面比windows更严格。尝试将端口更改为5000左右,看看是否有效。谢谢!您是对的,它通过使用更大的端口号来工作。因为我想让它在端口80上工作,所以手机是否需要根目录才能工作?您还需要在清单中添加internet权限。这是什么?“group=InetAddress.getByName(“coucou”);”这在我看来不像一个多播地址。应用程序需要root权限,请解释,谢谢大家的回答@WalterM,我修复了多播地址的问题。因此,如果客户端和服务器始终位于同一个本地网络上,就无法在端口80上创建客户端-服务器应用程序?