我正在尝试在我的Android手机和PC之间建立TCP套接字连接以进行文件传输。一个TCP服务器程序将在PC和TCP客户端程序中运行Android。服务器程序运行时一切正常。但是当服务器程序没有运行并且客户端尝试建立连接时,客户端会挂起(从某种意义上说它会等待很长时间才能建立连接)。如何克服这个问题?我想在客户端发现没有这样的服务器运行时立即终止套接字。有可能吗?
答案 0 :(得分:3)
我认为您需要使用Socket API的超时设置。 请参阅此处以获取更详细的讨论:
答案 1 :(得分:3)
您可以通过构建Socket
并使用new Socket()
方法来控制Socket.connect(SocketAddress, timeout)
的连接超时。
请注意,你可以使用它来减少默认超时,这有点超过一分钟,但不是增加。
答案 2 :(得分:2)
问题似乎出现在服务器配置中(在您的情况下为PC)。它可能禁止传出的ICMP流量,它负责通知客户端关闭的端口。
尝试在服务端口未运行时远程登录。 像
telnet <my.pc.address> <my-port>
在“正常”配置下,它应立即失败(与客户端应用程序完全一样)
telnet: Unable to connect to remote host: Connection refused
在有防火墙,ICMP禁止等的棘手配置下,它会“挂起”很长时间,“认为”服务正在运行并等待它的回答。