我有一个Java应用程序通过Java-COM桥使用第三方COM组件。 此COM组件打开到远程主机的套接字连接。
这个主机可能需要一些时间来回应,我怀疑我正在超时。 我不确定,因为正如我所说,这是一个封闭的第三方组件。
这个组件的API不公开给我的套接字连接,所以我没有办法configuration超时。 所以我不知道是否有任何方法来调整系统默认超时。
我正在使用Windows Server 2008 x64企业版。
你是否想要构建应用程序,以便在运行时知道是否发生超时,或者是否要检查闭源COM组件的行为? 如果是后者,在你的开发箱上安装Wireshark并观察连接。 如果是前者,你想确保你的Java调用到本地不会永远挂起? 如果是这种情况,请查看java.util.concurrent executor服务的东西 – 有一种方法可以在另一个线程中调用一个方法,最多等待N秒,然后再将控制权返回给您的线程。
您可以引入您自己的SocketImplFactory(请参阅java.net.Socket类的静态方法setSocketImpl() )。 然后,您可以使用您自己的SO_TIMEOUT参数值创建SocketImpl对象。
Microsoft的TcpMaxDataRetransmissions中的“Windows Vista Tcp Ip配置设置”中描述的注册表设置可能允许您设置所需的全局超时。
当然,您将需要小心,以免在处理过程中对服务器的其余部分造成实时错误的延迟响应。
如果您希望看到建立连接,然后可能从超时退出,则可以使用TCPview: http ://technet.microsoft.com/en-us/sysinternals/bb897437.aspx