2013-11-03 3 views
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가 작동하지 않고 빈 화면이 나타납니다. 왜?

+1

out.write(); out.flush()도 사용하십시오. 모든 데이터를 강제로 전송합니다. – wxyz

+1

클래스 이름의 첫 글자에는 대문자를 사용하십시오 (예 :'main' 대신'Main') [질문에 답하지 않고 java 커뮤니티에서 매우 중요한 대회] – amit

+0

'\ n''\ r \ n'은 편집기 (서버) 문자열 또는 파일의 끝을 찾습니다. tham을 찾을 수없는 경우 -> 빈 화면이 표시됩니다. –

답변

3

protocol specification

후이즈 서버가 WHOIS 클라이언트의 요청에 대한 TCP 포트 43에서 수신 있다고 때문입니다. WHOIS 클라이언트는 WHOIS 서버에 텍스트 요청을하고 다음 WHOIS 서버가 텍스트 내용으로 응답합니다. 모든 요청은 이며 ASCII CR로 끝나고 ASCII LF로 끝납니다.

따라서 서버는 회신하기 전에 회선 끝을 기다립니다. 그래서 당신이 줄의 끝을 보내지 않으면, 당신은 결코 대답을 얻지 못할 것입니다.

LF를 보내고 있기 때문에 이전에 CR을 보내지 않았기 때문에 서버가 요청을 거부했을 수도 있습니다. 요청은 "MHProfessional.com\r\n"이어야합니다.