0

やあ。

たとえば、次のコードがありますが、正しく機能しています。

   class main {
           public static void main(String args[]) throws Exception {
        Socket socks = new Socket("whois.internic.net", 43);
    InputStream in = socks.getInputStream();
    OutputStream out = socks.getOutputStream();
    String str    ;
    str= "MHProfessional.com"+"\n";
    byte buf[] = str.getBytes();
    out.write(buf);

    int c;
    while ((c = in.read()) != -1) {
        System.out.print((char) c);
    }
    //socks.close();

しかし、これを削除すると: +"\n". 次に、プログラムIDが機能せず、空白の画面が表示されます。なぜ?

4

1 に答える 1

3

プロトコル仕様がそう言っているので

WHOIS サーバーは、TCP ポート 43 で WHOIS クライアントからの要求をリッスンします。WHOIS クライアントが WHOIS サーバーにテキスト リクエストを送信すると、WHOIS サーバーはテキスト コンテンツで応答します。すべての要求は ASCII CR で終了し、次に ASCII LF で終了します。

したがって、サーバーは応答する前に行の終わりを待ちます。したがって、行末を送信しないと、応答が得られません。

LF を送信しているが、前に CR を送信していないため、サーバーはリクエストを拒否することさえできた可能性があることに注意してください。リクエストは"MHProfessional.com\r\n".

于 2013-11-03T08:21:23.350 に答える