我的电脑上有一个非常简单的绘图应用程序,它存储点并为每个点绘制一个椭圆。
我正在尝试将其发送到一个 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 发送的消息。所以我猜它与连接有关。
我已经
在 AndroidManifest中设置了android.permission.CHANGE_WIFI_MULTICAST_STATE
和。android.permission.INTERNET
我希望我提供的信息已经足够了。
我正在使用模拟器和android 2.2。
题外话:我不太了解 MulticastSockets 是如何工作的,我该如何选择 D 类 IP 和端口?