我在我的 Android 设备上实现了简单的 udp 服务器。(sdk 1.5) 当我在手机上运行本地客户端时,它工作正常,通过它向我的服务器发送触发器。
但是当我尝试从外部服务器获取 udp 调用到我的手机时,它不起作用。 已经确保外部服务器未被防火墙阻止,并且它正在将 udp 触发器发送到我的手机正在监听的正确端口。
我在手机上使用了 natstat 并检查了手机是否真的在监听它的本地 ip 和我设置的端口。
这是我的服务器代码:(在设备上)
// server will listen to one client
try
{
Thread udpServerThread = new Thread()
{
@Override
public void run()
{
try
{
// Retrieve the ServerName
InetAddress serverAddr = InetAddress
.getByName("localhost");
Log.d("UDP", "S: Connecting...");
// Create new UDP-Socket
socket = new DatagramSocket(SERVERPORT,serverAddr);
byte[] buf = new byte[17];
// * Prepare a UDP-Packet that can contain the data we
// * want to receive
DatagramPacket packet = new DatagramPacket(buf,
buf.length);
Log.d("UDP", "S: Receiving...");
// wait to Receive the UDP-Packet
socket.receive(packet);
Log.d("UDP", "S: Received: '"
+ new String(packet.getData()) + "'");
acceptedMsg=new String(packet.getData());
notifyService(acceptedMsg);
Log.d("UDP", "S: Done.");
} catch (Exception e)
{
Log.e("UDP", "S: Error", e);
}
}
};
udpServerThread.start();
}
catch (Exception E)
{
Log.e("r",E.getMessage()) ;
}
所以正如我所说,当我尝试使用发送 udp 触发器的本地客户端(独立线程)时,它工作正常,但是当我采用此客户端实现并将其放在外部真实服务器上时, UDP发送后手机无响应。
有什么想法吗?
谢谢,
射线。
最佳答案
我猜测,当您调用 InetAddress.getByName("localhost")
时,您将获得环回地址 (127.0.0.1)。
您真正想要做的是将套接字绑定(bind)到 INADDR_ANY,这显然可以通过创建 DatagramSocket
来实现,如下所示:
socket = new DatagramSocket(SERVERPORT);
关于android - UDP 服务器不接受来自外部的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2818284/