Telnet赢得';在我用Java创建了一个简单的服务器之后,我无法连接到localhost

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

现在,我用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(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并安装它之后才这样做的。是否缺少一个简单的步骤?

在您的程序中,会发生以下事件:

  • 服务器13点开始
  • telnet localhost 13:连接到该服务器
  • 一旦建立连接,服务器就会发送日期
  • 您将在客户机上看到日期
  • out.flush()说我的客户写完了
  • telnet客户端不理解服务器命令(日期)
  • telnet关闭连接
  • 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有一个坏习惯,就是在断开连接时清除窗口。