我有一个Java应用程序,它有三个打开的线程,每个线程都是一个套接字并连接到不同端口上的服务器。 在建立与服务器的连接后,我在每个套接字上设置了so_timeout。 之后线程阻塞在read()上等待。 只有一个线程在20秒后超时(这是我设置的超时)。 另外两个忽略超时。 TCP层可能一次只处理一个超时? 有没有其他解释?setSoTimeout在客户端套接字上不会影响套接字
2
A
回答
2
3
我在过去在处理SO_TIMEOUT在Windows中有几个问题。我相信设置这是“假设”来设置底层的套接字实现,这可能取决于操作系统并与注册表设置等相冲突。
我的建议是不使用SO_TIMEOUT在超时时强制引发异常。在读取()之前,请使用非阻塞I/O或检查是否有可用字节()。
相关问题
- 1. 套接字客户端如何setSoTimeout
- 2. 套接字客户端不会终止
- 3. 套接字setSoTimeout澄清
- 4. Asyncrhonous套接字客户端
- 5. lua套接字客户端
- 6. Java上的客户端套接字
- 7. 使用套接字io java客户端的套接字io客户端
- 8. java套接字客户端单连接
- 9. 套接字未能接受客户端?
- 10. 客户端套接字连接问题
- 11. PHP - 客户端套接字连接
- 12. 异步套接字客户端接收
- 13. 客户端的套接字连接
- 14. 连接两个客户端套接字
- 15. C套接字服务器,Java套接字客户端:阻塞!
- 16. Python套接字客户端到Java套接字服务器
- 17. 将java套接字客户端移植到HTML5套接字
- 18. setSotimeout在数据报套接字
- 19. 套接字 - 在客户端使用INADDR_ANY
- 20. 客户端套接字发送,但静默服务器套接字不接收
- 21. 客户端套接字接受的数据与服务器套接字不同
- 22. Unix域套接字(C) - 客户端“删除”connect()上的套接字?
- 23. 如何在客户端套接字连接上设置超时?
- 24. PHP套接字服务器/客户端
- 25. 管理客户端套接字池
- 26. 异步客户端套接字关闭?
- 27. 客户端服务器udp套接字
- 28. 如何使用客户端套接字
- 29. 套接字客户端问题“__getitem__”
- 30. 套接字java客户端服务器
请张贴您的代码,您可能有一个鬼鬼祟祟的逻辑错误,不能被您的问题抓住。 – Jonathan 2009-08-20 13:25:20
拨打sock.getSoTimeout()以确保它返回20000.也发布一些代码。你在运行什么操作系统? – Nick 2009-08-20 20:36:51
下面是建立连接的代码: while(!connected){0} {0} {0} {0}请尝试以下代码:client = new Socket(); InetSocketAddress sa = new InetSocketAddress(serverIP,port); InetSocketAddress(serverIP,port); \t \t client.connect(sa); \t \t client.setKeepAlive(true); (UnknownHostException e){ \t} catch(UnknownHostException e){ \t \t e.printStackTrace(); \t \t return null; \t}赶上(IOException异常E){ \t ... \t} \t如果(client.isConnected()){ \t \t //设置超时阻止读取操作。 \t \t try { \t \t \t client.setSoTimeout(timeout * 1000); (SocketException e) \t \t connected = true; \t} } – arsenalfan 2009-08-25 05:07:54