如何在Android上接收多播消息?

时间:2011-09-18 09:36:23

标签: java android sockets connection multicastsocket

我的PC上有一个非常简单的绘图应用程序,它存储点并为每个点绘制一个椭圆。

我正在尝试将此发送到Android应用程序,该应用程序将接收每个点的坐标,然后绘制椭圆。

现在我正在使用多播套接字,但它似乎不起作用。我害怕我错过了什么。

两个应用程序中的InetAddress和端口相同:234.235.236.237和9876

在我的PC应用程序中,MultiCastSocket初始化代码如下所示:

private void InitiateSocket() throws IOException
{
    //  Create a socket and start the communication
socket = new MulticastSocket(port);
iAddr = InetAddress.getByName("234.235.236.237");

    //  Joins the multicastSocket group
socket.joinGroup(iAddr);
} 

当我想发送坐标时,我称之为:

public void SendMessage(int x, int y)
{

    //Translate message to bytes
byte[] _data = (x+ " " + y).getBytes();

    //Create and send a packet
DatagramPacket _packet = new DatagramPacket(_data, _data.length, iAddr, port);

    try {
        socket.send(_packet);
        textArea.append(x + " " + y + " ");
    } catch (IOException e) {
        System.exit(0);
    }
} 

然后我的Android应用程序看起来像这样:

WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wm.createMulticastLock("mydebuginfo");
multicastLock.acquire();


//Create a socket and start the communication
_socket = new MulticastSocket(_port);

//    Joins the multicastSocket group
_socket.joinGroup(_iadr);

//    Add a new Client to the socket
new Client(_socket, this);

当我想发送消息时,我称之为,这与pc applikacation中的消息非常类似

    private void SendMessage(String _s)
{
    //    Translate message to bytes
    byte[] _data = (_name + ": "+ _s).getBytes();

    //    Create and send a packet
    DatagramPacket _packet = new DatagramPacket(_data, _data.length, _iadr, _port);

    try {
        _socket.send(_packet);
    } catch (IOException e) {
        _field.append(e.toString());
    }
}

然后Client类使用以下代码监听套接字:

@Override
public void run() {

    byte[] _data = new byte[1024];
    while(true)
    {
        try
        {
            //Datagram for receiving
            DatagramPacket packet = new DatagramPacket(_data, _data.length);

            //Receive the packet, convert it and send it to the Activity class
            _socket.receive(packet);
            String _medd = new String(_data, 0 , packet.getLength());
            _csta.input = _medd;
        }
        catch(IOException e)
        {
            //Will break when the socket is closed
            break;
        } 
    }
}

事情是我收到了自己从android应用程序发送的消息,但是我没有收到从PC发送的消息。所以我猜它与连接有关。

我已设置android.permission.CHANGE_WIFI_MULTICAST_STATEandroid.permission.INTERNET 在AndroidManifest中。

我希望我提供的信息足够。

我正在使用模拟器和Android 2.2。

非主题: 我真的不明白MulticastSockets是如何工作的,我怎样才能选择D类IP和端口?

1 个答案:

答案 0 :(得分:0)

仿真器似乎不支持多播:

https://stackoverflow.com/a/3179939/1686442