【问题标题】:readln of InputStreamReader doesn't workInputStreamReader 的 readln 不起作用
【发布时间】:2013-02-08 10:44:09
【问题描述】:

我必须使用 java 与服务器发送和接收一些流。 协议是 telnet,如果我在 windows 中使用 cmd 使用以下命令:"telnet 10.0.1.5 9100" 并在 "^AI202" 之后我有响应。

java代码:

import java.io.*;

import java.net.*;

public static void main(String[] args) throws SocketException, IOException {

    Socket s = new Socket();

    PrintWriter s_out = null;

    BufferedReader s_in = null;

    String remoteip = "10.0.1.5";

    int remoteport = 9100;

    s.connect(new InetSocketAddress(remoteip , remoteport));

    s_out = new PrintWriter( s.getOutputStream(), true);

    s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));

    String message = "^AI202";

    try{

    System.out.println(s_in.readLine());

    }

    catch(Error e){

    System.out.println(e);

    }

    s_out.close();

    s_in.close();

    s.close();

}

问题是一样的:s_in调用方法readLine()和程序循环无限。

【问题讨论】:

  • 抱歉我错过了“s_out.append(message);”但也是同样的问题
  • 您正在尝试从套接字读取。有数据可以读取吗?远端有没有发送任何东西?

标签: java netbeans vpn telnet


【解决方案1】:

我认为 System.out.println(s_in.readLine());会尝试一遍又一遍地读取它,每次都失败并导致无限循环。

试试

 String line ="";

 while ((line = s_in.readLine()) != null) { 

      // Do what you want to do with line.          

}

Java Socket BufferReader.readline get null

【讨论】:

  • 如果我将 s_in.readLine() 放入字符串中并尝试打印字符串,我也会遇到同样的问题
  • 相同...我从调试模式开始,我注意到输入流有 8000 个或更多具有相同值的字符 '\u0000'
  • readLine 将阻塞,直到它从套接字读取整个留置权。远程端发送的行是否以换行符结束?
  • @user2053994 \u0000 表示空字符...是吗?
  • yes 是空字符。带有换行符的远程发送行
【解决方案2】:

问题在于telnet 协议不会以换行符终止命令。

将您的读取块更改为

  try {
    char [] cbuf = new char[7];
    System.out.println(s_in.read(cbuf, 0, cbuf.length));
  } catch(Error e){
    System.out.println(e);
  }

你会得到一些意见。

【讨论】:

  • 不确定。我刚刚在 wireshark 上看到了数据包,第一次交换是 7 个字节长,末尾没有 new line 字符。
  • 这个改动还是有同样的问题
  • 但是你得到任何输出了吗?如果没有,请安装wireshark,这样您就可以检查网络活动并查看交换了哪些数据包。否则很难调试...
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多