【问题标题】:Error Help java.net.SocketException: Connection reset错误帮助 java.net.SocketException:连接重置
【发布时间】:2015-05-08 07:43:47
【问题描述】:

这是我第一次使用 Socket 客户端服务器系统。我的系统服务器端出现错误,我不知道它来自哪里。 我的客户端运行良好并正在关闭,但我的服务器这是

的功能
   public void run() throws Exception
{
      ServerSocket SRVSCK = new ServerSocket(444);
      Socket Sock = SRVSCK.accept();
      String Message="";
      InputStreamReader IR = new InputStreamReader(Sock.getInputStream());
      BufferedReader BR = new BufferedReader(IR);
      Message = BR.readLine();
      while(Message!="exit"){
      System.out.println(Message);
      Message = BR.readLine();
      }
      SRVSCK.close();
      Sock.close();
     System.out.println("here");
   }

但这是我遇到的错误。它不会退出while循环。我已经尝试根据 Message 的值尽早打破循环,但事实并非如此。我不知道为什么。我检查了线程,似乎没有什么是相同的。如果重要,来自客户端的信息来自文件。

【问题讨论】:

  • 对变量使用 java 约定以使代码可读。 message, sock 应该是小写的
  • 谢谢大家。实际上,我很惊讶解决方案如此简单,而且与我认为的完全无关。
  • 如果您不确定客户端是否以小写形式发送所有命令,您应该改用while(!Message.equalsIgnoreCase("exit"))

标签: java sockets socketexception


【解决方案1】:

首先,您可能应该坚持以小写开头的变量名称的 Java 命名约定。接下来,比较字符串时,不要使用:

string1 == string2
string1 != string2

那些行不通。相反,使用

string1.equals(string2)

【讨论】:

  • 只是为了完整: == 和 != 在这种情况下不起作用,因为它们会测试左侧是否与右侧指向相同的内存位置。即,如果它们指向完全相同的对象。
  • 是的,对不起,我忘了添加更深入的解释。
【解决方案2】:

Message!="exit" 不应用于字符串比较。在java中比较String使用equals方法。使用

!Message.equals("exit")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2010-09-08
    相关资源
    最近更新 更多