我有一個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