持续TCP连接客户端/服务器

问题描述:

我正在通过3G构建从Android设备到服务器的客户端服务器应用程序。 由于提供3G的网络运营商,客户端设备位于NAT后面。因此,服务器不可能与客户端建立连接。我可以采用投票的方法,但在这之前,我想用尽所有其他选项。有什么方法(我还没有找到)在客户端和服务器之间保持TCP Socket连接打开,以便服务器能够发起与客户端的通信?持续TCP连接客户端/服务器

这种情况是,基于服务器状态的定期客户端/服务器通信会非常规律地进行更新 - 我们每隔几秒就会说话一次。 UDP会是更好的选择吗?也许不是因为NAT问题仍然让它头疼。

我还有其他选择吗?

非常感谢

+1

你在问如何保持它打开(几秒钟的窗口) - 我想知道它是如何关闭你的第一个地方。 – corsiKa 2011-02-28 21:20:48

+0

不是。但是,如果我使用ObjectOutputStream将对象写入服务器,那么稍后可以重新使用它,而套接字仍处于打开状态?或者我需要重新实例化ObjectOutputStream?我似乎无法找到任何这方面的信息。谢谢 – Joeblackdev 2011-02-28 21:43:57

NAT并不意味着服务器不能发送任何东西。只需打开客户端的连接,并让服务器发送它记录的任何事件。您可能还需要包含简单的心跳协议,以使客户端和服务器注册断开的连接并使NAT知道连接仍在使用中。

+0

你好。谢谢回复。服务器可以发送信息,尽管只是响应来自客户端的ObjectOutputStream.writeObject(...)。由于NAT问题,它无法启动到客户端的连接。 – Joeblackdev 2011-02-28 21:45:43

只需打开一个套接字并使用它,包括ObjectOutputStream。如果中间系统断开连接,您将收到一个异常,然后关闭并重复。