1

我正在尝试在我的 Android 手机和 PC 之间建立 TCP 套接字连接以进行文件传输。一个 TCP Server 程序将在 PC 中运行,而 TCP 客户端程序在 Android 中运行。当服务器程序运行时,一切正常。但是当服务器程序没有运行并且客户端尝试建立连接时,客户端会挂起(从某种意义上说,它会等待很长时间直到建立连接)。如何克服这个问题?一旦客户端发现没有这样的服务器正在运行,我想终止套接字。有可能这样做吗?

4

3 回答 3

3

我相信您需要使用Socket API的超时设置。有关更详细的讨论,请参见此处:

设置套接字超时

于 2012-06-17T10:05:07.567 回答
3

Socket您可以通过构造 anew Socket()并使用该Socket.connect(SocketAddress, timeout)方法来控制 a 的连接超时。

请注意,您可以使用它来减少默认超时,这是一分钟多一点,但不能增加它。

于 2012-06-17T10:48:10.173 回答
2

问题似乎出在服务器配置中(在您的情况下为 PC)。它可能已禁止传出 ICMP 流量,该流量负责通知客户端有关关闭的端口。

尝试在您的服务端口未运行时远程登录您的服务端口。像

telnet <my.pc.address> <my-port>

在“正常”配置中,它应该立即失败(正如您的客户端应用程序应该)

telnet: Unable to connect to remote host: Connection refused

在带有防火墙、禁止 ICMP 等的棘手配置上,它会“挂起”很长时间,“认为”服务正在运行并等待它的回答。

于 2012-06-17T10:21:13.107 回答