Android UDP网络接收器未在WIFI上接收任何数据

时间:2013-08-16 17:31:39

标签: android udp

在Android中尝试了以下代码,并且它没有使用直接WI-FI接收任何数据,这意味着发送者(桌面应用)和Android应用都位于同一网络上。发件人应用程序知道WI-FI平板电脑的ipaddress并将数据发送到该地址。

但是,以下代码可以很好地将其作为独立的Java应用程序运行。接收代码不使用InetAddress地址;在Android中是否需要它。有人可以通过WI-FI发布接收udp数据的示例。

发件人将数据发送到平板电脑,知道平板电脑ipaddress。发送方和接收方都使用相同的端口。

我正在尝试获取数据包并从数据包中获取内容。我没有回复发件人的任何回复。我是否需要向发件人回复任何内容。我还需要一个WI-FI经理吗?

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class NetworkReceiver {

  static boolean isFinish = false;

    try {

         DatagramSocket s = new DatagramSocket(2010);
         System.out.println("setting up port");
         byte[] data = new byte[12];

        while (!isFinish) 
        {          
            System.out.println("creating datagram");
            DatagramPacket p = new DatagramPacket(data, data.length);
            s.receive(p);
            System.out.println("got packet");
            ByteBuffer bb = ByteBuffer.allocate(12).order(ByteOrder.LITTLE_ENDIAN);
            bb.put(data);
            bb.rewind();
            System.out.println(bb.getFloat());
            System.out.println(bb.getFloat());
            System.out.println(bb.getFloat());

         }
    } catch (IOException e) {
      e.printStackTrace();
    }

}

1 个答案:

答案 0 :(得分:0)

  

但是,以下代码可以很好地将其作为独立的Java应用程序运行。

我假设你从连接到同一个WIFI路由器的两个独立PC运行发送器和接收器应用程序是正确的吗?

  

我正在尝试获取数据包并从数据包中获取内容。我没有回复发件人的任何回复。我是否需要向发件人回复任何内容。我还需要一个WI-FI经理吗?

不,您不需要以任何方式回应或回复收到的数据包。

您的接收器代码看起来还不错,至少应该接收发送的第一个数据包。如果您的AndroidManifest.xml权限不允许网络访问,Android会抱怨。

在您确认您的发件人应用程序(您应该包含代码)实际上是将数据包发送到WIFI网络之前,我可以建议所有内容,以确保您可以从PC ping您的平板电脑。然后在发送器PC上安装Wireshark,并查看运行时发出的UDP数据包。检查目标地址和端口。确保它们看起来应该到达您的平板电脑。

最后,我再次假设您没有尝试多播UDP,因为您已在发件人中指定了平板电脑的IP地址。如果是,您需要使用WifiManager获得多播锁。