我在PC上有一個非常簡單的繪製應用程序,它可以存儲點併爲每個點繪製一個橢圓。如何在Android上接收多播消息?
我想把這個發送到一個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());
}
}
然後在客戶端類偵聽與此代碼插座:
@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發送的消息。所以我猜測它與連接有關。
我在AndroidManifest中設置了android.permission.CHANGE_WIFI_MULTICAST_STATE
和android.permission.INTERNET
。
我希望我給出的信息就夠了。
我正在使用模擬器和android 2.2。
Off topic: 我真的不明白MulticastSockets是如何工作的,我該如何選擇D類IP和端口?
我發現了一個code.google線程報告說,Android不支持MulticastSocket時,線程是老雖然,任何人都可以確認這是問題嗎? – Orujimaru