【问题标题】:udp connection in android fails to receive packetsandroid中的udp连接无法接收数据包
【发布时间】:2012-10-02 21:00:59
【问题描述】:

我正在尝试在服务器和安卓设备之间建立和 udp 连接。我已经编写了服务器和 android 客户端部分。当我在我的计算机 localhost 上启动服务器时,服务器和模拟器都可以很好地相互通信。但是,当我在云中启动服务器时,模拟器可以向服务器发送 udp 数据包但无法接收。

所以,我首先想到的是可能存在一些路由问题,阻止数据包到达模拟器。因此,我使用了具有 3g 连接的手机(三星 Galaxy s2,ICS)。然而,同样的事情又发生了。我的手机可以发送 udp 数据包,但收不到任何数据。

然后,我想也许我在云端的机器无法发送数据包。所以,我用wireshark嗅探了数据包,发现它确实发送/接收udp数据包。

我在 stackoverflow 中阅读了很多关于此问题的问题,但我无法提出解决方案。也许你们帮帮我。这是我工作的服务器和客户端 udp 发送/接收部分。如果您需要更多信息,我愿意提供。

提前致谢。

服务器(无需编写监听部分,因为没问题)

ClientIPAddress = IncomingPacket.getAddress();
ClientPort = IncomingPacket.getPort();
OutToClientSocket = new DatagramSocket();
DatagramPacket PacketToClient = new DatagramPacket(sendBuffer, sendBuffer.length,     ClientIPAddress, ClientPort);
OutToClientSocket.send(PacketToClient);

客户端(仅监听部分)

ServerIP = InetAddress.getByName(MachineName);
DatagramPacket IncomingPacket = new DatagramPacket(buf, buf.length);
MySocket.receive(IncomingPacket);
buf = IncomingPacket.getData();
...

【问题讨论】:

  • 为什么要在服务器中创建第二个 DatagramSocket?你收到消息的那个有什么问题?
  • @EJP 它在不同的线程上运行
  • 这不是一个充分的理由。你仍然可以使用同一个套接字,而且你应该这样做。
  • @EJP 你是对的。谢谢你。当我使用 1 个套接字进行发送和接收时,它起作用了。

标签: android sockets udp


【解决方案1】:

感谢@EJP,我已经解决了我的问题。我正在使用数据报套接字来监听数据包并使用另一个数据包来发送数据包。两种操作都必须使用 1 个套接字。

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2014-12-13
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多