2016-09-30 4 views
1

소켓 프로그래밍을 처음 사용하고 숫자를 보내는 클라이언트를 만들고 서버가 클라이언트가 보낸 번호의 배수를 반환합니다. 먼저 서버를 실행 한 다음 클라이언트를 실행합니다. 값을 입력하지만 서버에서 응답을받지 못합니다. 다음은 내 클라이언트 및 서버 코드입니다.서버 클라이언트 JAVA 소켓 프로그래밍 오류

서버 코드

try 
     { 
     ServerSocket ss=new ServerSocket(4000); 
     while(true) 
     { 
     Socket sock=ss.accept(); 
     InputStreamReader isr=new InputStreamReader(sock.getInputStream()); 
     BufferedReader br=new BufferedReader(isr); 
     String num=br.readLine(); 
     try 
     { 
      int n=Integer.parseInt(num); 
      n=n*2; 
      String ret=String.valueOf(n); 
      PrintWriter writer=new PrintWriter(sock.getOutputStream()); 
      writer.println(ret); 
      writer.close(); 
     } 
     catch(IOException ex) 
     { 
      System.out.println("Enter a number!"); 
     } 
     } 
     } 
     catch(Exception ex) 
     { 
      System.out.println("Error"); 
     } 

클라이언트 코드

try 
     { 
     Socket s=new Socket("127.0.0.1",4000); 
     String st; 
     PrintWriter pw=new PrintWriter(s.getOutputStream()); 
     InputStreamReader isr=new InputStreamReader(s.getInputStream()); 
     BufferedReader br=new BufferedReader(isr); 
     InputStreamReader is=new InputStreamReader(System.in); 
     BufferedReader in=new BufferedReader(is); 
     st=in.readLine(); 
      pw.println(st); 
      st=br.readLine(); 
      System.out.println("the server says: "+ st); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

내가 서버에서 출력을 받고 있지 않다으로 수행 할 단계 무엇을 제안하십시오.

+0

모든 오류? – kosa

+0

소켓에 쓰기 전에'br.readLine()'을 사용하여 서버로부터 읽는 중입니다. 당신은'in.readLine()'을 사용하여 표준 입력으로부터 입력을 얻고 이것을'pw.println()'을 사용하여 서버 소켓에 쓰고'br.readLine()'을 사용하여 서버에서 읽어야합니다. – Priyesh

+0

@ Priyesh 고맙습니다. 그러나 서버가 여전히 응답하지 않습니다. 클라이언트가 입력 한 숫자로 출력을 표시합니다. 예 : '2'를 입력하면 서버는 '2'로 응답합니다. –

답변

0

문제 pw 통해 st를 전송하는 클라이언트 코드의 일부와 거짓말하고 st 서버의 출력 주장한다.

pw.println(st); 
System.out.println("the server says: "+ st); 

당신은 실제로 br 통해 서버에서 값을 받고 문제를 해결 할 수 있어야한다. 또한 pw를 세척해야합니다

pw.println(st); 
pw.flush(); 
st = br.readLine(); 
System.out.println("the server says: "+ st); 

또는, 당신은 할 수 pw 자동 플러싱과 같이 : 콘솔에서

PrintWriter pw=new PrintWriter(s.getOutputStream(),true); 
// ... 
pw.println(st); 
st = br.readLine(); 
System.out.println("the server says: "+ st); 
+0

나는이 일을 시도했다. 개념적으로 정확하기 때문에 앞서 언급 한 코드를 수정 하겠지만 서버에서 응답을 얻지는 못하고 있습니다. –

+0

나는 서버가 클라이언트가 전달한 값을 읽지 않는다고 생각한다. 이 코드 세그먼트에 서버 코드에 오류가있을 수 있습니까? int n = Integer.parseInt (num); n = n * 2; String ret = String.valueOf (n); ' –

+0

수정 했습니까? 내 컴퓨터에서 작동하지 않습니다. –

관련 문제