在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();
}
}
答案 0 :(得分:0)
但是,以下代码可以很好地将其作为独立的Java应用程序运行。
我假设你从连接到同一个WIFI路由器的两个独立PC运行发送器和接收器应用程序是正确的吗?
我正在尝试获取数据包并从数据包中获取内容。我没有回复发件人的任何回复。我是否需要向发件人回复任何内容。我还需要一个WI-FI经理吗?
不,您不需要以任何方式回应或回复收到的数据包。
您的接收器代码看起来还不错,至少应该接收发送的第一个数据包。如果您的AndroidManifest.xml权限不允许网络访问,Android会抱怨。
在您确认您的发件人应用程序(您应该包含代码)实际上是将数据包发送到WIFI网络之前,我可以建议所有内容,以确保您可以从PC ping您的平板电脑。然后在发送器PC上安装Wireshark,并查看运行时发出的UDP数据包。检查目标地址和端口。确保它们看起来应该到达您的平板电脑。
最后,我再次假设您没有尝试多播UDP,因为您已在发件人中指定了平板电脑的IP地址。如果是,您需要使用WifiManager获得多播锁。