2014-02-06 2 views
0

Ну, мне нужно уточнить, что это важность «\ п» Новая линия в строковой переменной здесьВажность новой строки « п» в Java сетевой

import java.net.*; 
import java.io.*; 

public class Whois{ 
    public static void main(String[] args){ 
     try{ 
      Socket soc = new Socket("whois.internic.net",43); 
      InputStream in = soc.getInputStream(); 
      OutputStream out = soc.getOutputStream(); 
      String url = "http://www.infiniteskills.com\n"; 
      byte[] buffer = url.getBytes(); 
      out.write(buffer); 
      int c; 
      while((c = in.read()) != -1){ 
        System.out.print((char)c); 
      } 
      in.close(); 
      out.close(); 
     }catch(IOException e){ 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Примечание: - без \ n программа работает неправильно и не выводится.

+4

Какой протокол вы отправляете? –

+0

Может помочь узнать, что 'out' и' in'are. – sheltem

+0

в порядке Я отредактирую сообщение – Scorpion

ответ

1

Новая линия не имеет значения для сетей Java.

Однако он имеет важное значение во многих протоколах ,, многие из которых основаны на терминале «Telnet Terminal» \r\n в качестве терминатора линии. Это, безусловно, включает SMTP, FTP, HTTP и Telnet.

Он также имеет значение для метода BufferedReader.readLine(). Вы найдете сотни вопросов здесь о readLine(), блокирующих навсегда, на что ответ: «вы читаете строки, но вы не пишете строки», т. Е. Просто отправляете строку без терминатора строк. Это не полная строка, поэтому readLine() не возвращает ее.

+0

@AlvinBunk Этот ответ отвечает на вопрос, который явно указан как в заголовке, так и в теле вопроса. Более того, оригинальный плакат принял его как правильный ответ. Поэтому ваш комментарий читается немного странно. – EJP

+0

Извините @EJP, да, ваш пост конструктивен. У меня не было комментария к вашей публикации, хотя - или, по крайней мере, я не вижу его здесь. Возможно, было бы хорошо сказать OP немного об Whois. –

3

TCP порт 43 является протокол WHOIS объяснено здесь в Википедии: Whois

Если вы видите статья говорит: Отправить сингл «командной строки», заканчивая CRLF.
Вот почему вам нужен символ новой строки в вашем коде.

+0

вы имеете в виду, что проблема в правиле протокола – Scorpion

+1

Если он говорит 'CRLF', то ему не нужно заканчивать' \ r \ n'? Или же '\ r' вставлен каким-то другим слоем? – ajb

+1

На самом деле @ajb прав, вероятно, он должен быть '\ r \ n' полностью совместим с протоколом Whois. Тот факт, что он работает с '\ n', вероятно, зависит только от реализации сервера. В этом случае сервер отвечает на '\ n' (что, вероятно, хорошо). Скорпион, я не подразумевал никаких проблем, просто давая вам ссылку на протокол Whois, чтобы вы могли понять, как устранить неполадки. Надеюсь, мой ответ поможет! –

Смежные вопросы