Telnet赢得';在我用Java创建了一个简单的服务器之后,我无法连接到localhost
现在,我用java制作了一个简单的服务器,如下所示:Telnet赢得';在我用Java创建了一个简单的服务器之后,我无法连接到localhost,java,server,localhost,telnet,Java,Server,Localhost,Telnet,现在,我用java制作了一个简单的服务器,如下所示: import Java.net.*; import Java.io.*; import Java.util.*; class Server{ public static void main(String[] args){ int PORT = 13; try(ServerSocket server = new ServerSocket(PORT)){ while(t
import Java.net.*;
import Java.io.*;
import Java.util.*;
class Server{
public static void main(String[] args){
int PORT = 13;
try(ServerSocket server = new ServerSocket(PORT)){
while(true){
try(Socket connection = server.accept()){
Writer out = new OutputStreamWriter(connection.getOutputStream());
Date now = new Date();
out.write(now.toString());
out.flush();
connection.close();
} catch(IOException ex){}
}
}
catch(IOException ex){
System.err.println(ex);
}
}
}
我从命令行编译并运行它。在端口13上,我尝试在telnet上运行此命令:
telnet localhost 13
,但它给我的只是“与主机的连接丢失”。请注意,我是在Windows 10上启用telnet并安装它之后才这样做的。是否缺少一个简单的步骤?在您的程序中,会发生以下事件:
connection.close();
你得到:
与主机的连接丢失
你关闭了连接;Telnet告诉过你的
这就是应该发生的事情
这里没有需要解决的问题
否则,服务器接受循环中会出现I/O异常
但是,由于您忽略了它们,所以无法确定是哪一个。您的代码似乎都不在方法中;您的
import
语句也不正确。发布真实代码。还有,不要默默地吞下Exception
s.@ElliottFrisch Ooops,我的意思是把它放在主要部分。我在复制和粘贴代码时忽略了这一点。请记住,1024以下的端口号是保留的,您需要特殊权限才能将套接字绑定到这些端口。@Someprogrammerdude我尝试过使用端口8050,但它仍然给我相同的响应。除IAC命令外,以太网不必理解任何内容。它还显示了其他内容。“主机连接丢失”并不意味着Telnet已经关闭了连接:它意味着对等方已经关闭了连接。并且out.flush()
不会对客户端“说”任何东西。它只是在服务器上刷新缓冲数据。Telnet甚至TCP对等方永远不知道远程对等方何时完成了写操作,而您的答案中的链接也无关紧要。在这种情况下,服务器不理解Telnet客户端,并且服务器关闭了连接(实际上它在这里就是这样做的)。您错误地声称Telnet客户端不理解服务器,并且客户端关闭了连接。谢谢,我只是从教科书中复制了这个示例。可能他们使用的是Telnet的早期版本…?不,他们只是没有告诉您应该正确发生什么。这里的一切都按设计进行。可能您应该发送一个带有日期的行终止符。Windows Telnet有一个坏习惯,就是在断开连接时清除窗口。