2012-02-26 1 views
0

필자는 내부 서버에 연결하고 도메인 세부 정보를 반환하는이 간단한 Java 프로그램을 작성했습니다. 그러나, 나는 이상한 문제에 직면하고있다. 나는 어리석은 소리가 나지만 여기 프로그램이있다!버퍼링 된 리더 및 소켓 사용

import java.io.*; 
import java.net.*; 
public class SocketTest { 
    public static void main(String[] args) { 
     String hostName; 
     int i = 0; 

     try {     
      Socket socketClient = new Socket("whois.internic.net", 43); 
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
      InputStream in = socketClient.getInputStream(); 
      OutputStream out = socketClient.getOutputStream(); 
      System.out.println("Please Enter the Host Name!!"); 
      hostName = bf.readLine();  
      hostName = hostName + "\n"; 
      byte[] buf = hostName.getBytes(); 
      out.write(buf); 

      while((i = in.read()) != -1) { 
       System.out.print((char)i); 
      } 

      socketClient.close(); 
     } catch(UnknownHostException uht) { 
      System.out.println("Host Error"); 
     } catch(IOException ioe) { 
      System.out.println("IO Error " + ioe); 
     } catch(Exception e) { 
      System.out.println("Exception " + e); 
     } 
    } 
} 

이 프로그램은 런타임 오류없이 잘 실행,하지만 난 try 블록의 마지막 조각 (국제) 서버에서 결과를 인쇄하려고 할 때 어떤 출력을 보여줍니다. 내가 코드를 재 배열을 시도하고 소켓 스트림을 만든 후 bf.readLine()을 배치하면 출력이 없다는 것을 알게되었습니다. 그러나 소켓 생성 전에 main 메소드의 시작 부분에 배치하면 프로그램이 원하는 출력을 표시합니다.

스트림 충돌이 발생 했나요? 나는 Java 네트워킹의 초보자입니다. 해결책은 분명하지만 이해할 수는 없습니다! 제발 도와주세요 !!! 당신이 출력 스트림에 도메인을 보낸 후

+0

, 그것은 읽을 수 없다. – skaffman

답변

1
이 입력 스트림 초기화를 이동

...이 로컬 나를 위해 작동 :

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

public class SocketTest { 
    public static void main(String[] args) { 
     String hostName; 
     int i = 0; 
     try { 
      Socket socketClient = new Socket("whois.internic.net", 43); 
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 

      OutputStream out = socketClient.getOutputStream(); 
      System.out.println("Please Enter the Host Name!!"); 
      hostName = bf.readLine(); 
      hostName = hostName + "\n"; 
      byte[] buf = hostName.getBytes(); 
      out.write(buf); 

      InputStream in = socketClient.getInputStream(); 
      while ((i = in.read()) != -1) { 
       System.out.print((char) i); 
      } 
      in.close(); 
      out.close(); 
      socketClient.close(); 

     } catch (UnknownHostException uht) { 
      System.out.println("Host Error"); 
     } catch (IOException ioe) { 
      System.out.println("IO Error " + ioe); 
     } catch (Exception e) { 
      System.out.println("Exception " + e); 
     } 
    } 
} 

출력 :

당신은 제대로 코드 들여 쓰기를 할 필요가
Please Enter the Host Name!! 
yahoo.com 

Whois Server Version 2.0 

Domain names in the .com and .net domains can now be registered 
with many different competing registrars. Go to http://www.internic.net 
for detailed information. 

YAHOO.COM.ZZZZZZZ.GET.ONE.MILLION.DOLLARS.AT.WWW.UNIMUNDI.COM 
YAHOO.COM.ZZZZZZ.MORE.INFO.AT.WWW.BEYONDWHOIS.COM 
....Whole bunch more 
관련 문제