如何从java套接字读取?

时间:2018-01-25 11:03:46

标签: java sockets

我正试图发送并阅读套接字的回复,但没有运气。到目前为止,我连接到服务器并读取连接回复(来自爱立信电信公司交换机的标题)并将其打印在System.out上。我需要做的是向交易所发送命令并获得回复,这就是我被困住的地方。下面是我的测试代码。

感谢任何帮助。

public class ExchangeClientSocket {

  public void run() {
      try {
        int serverPort = 23;
        InetAddress host = InetAddress.getByName("my.host.ip.address");
        Socket socket = new Socket(host, serverPort);

        InputStreamReader isr = new InputStreamReader(socket.getInputStream());
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(isr);

        int i;
        StringBuffer buffer = new StringBuffer();
        while (true) {
            i = in.read();
            if (i == 60) {
                break;
            } else {
                buffer.append((char) i);
            }
        }
        // this returns the head from exchange
        System.out.println(buffer.toString());

        out.write("allip;"); // command I want to send to exchange
        out.flush();

        System.out.println(in.ready()); // this returns false
        System.out.println(in.read());
        System.out.println("damn..");

        buffer = new StringBuffer();
        // can't get into this loop
        // this is where I want to read the allip response
        while ((i = in.read()) != -1) {
            i = in.read();
            if (i == 60) {
                break;
            } else {
                buffer.append((char) i);
            }
        }
        System.out.println(buffer.toString());

        out.close();
        in.close();
        socket.close();
      } catch (UnknownHostException ex) {
          ex.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
   }
}

1 个答案:

答案 0 :(得分:0)

以下是关于如何在写入输出流后从服务器获取输入的建议:只是从套接字中获取另一个输入流

因此,您不必从同一个流中读取,而是在发送命令并读取它后从套接字创建新流。

因此我建议您在此处将代码更改为:

public void run() {
    try {
        int serverPort = 23;
        InetAddress host = InetAddress.getByName("my.host.ip.address");
        Socket socket = new Socket(host, serverPort);

        InputStreamReader isr = new InputStreamReader(socket.getInputStream());
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(isr);

        int i;
        StringBuffer buffer = new StringBuffer();
        while (true) {
            i = in.read();
            if (i == 60) {
                break;
            } else {
                buffer.append((char) i);
            }
        }
        // this returns the head from exchange
        System.out.println(buffer.toString());

        out.write("allip;"); // command I want to send to exchange
        out.flush();

        // Create a new input stream here !!!
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        buffer = new StringBuffer();
        // can't get into this loop
        while ((i = in.read()) != -1) {
            i = in.read();
            if (i == 60) {
                break;
            } else {
                buffer.append((char) i);
            }
        }
        System.out.println(buffer.toString());

        out.close();
        in.close();
        socket.close();
    } catch (UnknownHostException ex) {
        ex.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}