0

我必须使用 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()和程序循环无限。

4

2 回答 2

0

问题是telnet协议不会用换行符终止命令。

将您的阅读块更改为

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

你会得到一些输入。

于 2013-02-08T11:40:23.557 回答
0

我认为 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 获取 null

于 2013-02-08T10:53:08.710 回答