簡體   English   中英

我如何從Java套接字讀取?

[英]How can I read from java socket?

我正在嘗試從套接字發送和讀取回復,但是沒有運氣。 到目前為止,我得到的是連接到服務器並讀取連接答復(來自愛立信電信交換機的標題),並將其打印在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();
      }
   }
}

這是關於在寫入輸出流后如何從服務器獲取輸入的建議: 只需從socket獲取另一個輸入流

因此,發送命令並讀取后,您可以從套接字創建一個新的流,而不是從同一流中讀取。

因此,我建議在這里將代碼更改為此:

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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM