2013-04-15 110 views
-1

如果我执行下面的代码(注意:没有使用真正的IP地址)打开Java套接字与Telnet?

Socket s = new Socket("120.200.100.111", 80); 
s.setSoTimeout(10 * 1000); 
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
in.readLine(); 

10秒后,我得到“SocketTimeoutException:读取超时”

但如果我telnet,我得到:

telnet> open 120.200.100.111 80 
Trying 120.200.100.111... 
Connected to foo.bar.org. 
Escape character is '^]'. 

请注意,我知道,对于一个完整的应用程序,我应该使用某种现有的Socket通信API的,但不应上面的测试会得到某种来自服务器的及时响应的?

回答

2

不应上面的测试会得到某种来自服务器的及时响应的?

不。远程登录交换不会从服务器向您发送任何内容开始。 有送东西。服务器正在等着你;你正在等待它;你是一个读取超时的人,所以你得到一个读取超时。

Telnet客户端不使用默认阅读超时。

+0

在这个特定的情况下,服务器旨在被发送“欢迎消息”。我认为它应该在我连接时立即吐出,没有我发送任何东西,这是正确的吗? – Black

+0

@George显然不是。 Telnet客户端也没有看到它。尝试发送回车。 – EJP

+0

确认服务器未履行合同。谢谢你的帮助。 – Black