2016-09-30 3 views
1

私はソケットプログラミングには新しいし、番号を送信するクライアントを作成し、サーバーはクライアントから送信された番号の倍数を返します。私はまずサーバーを実行してからクライアントを実行します。私は値を入力していますが、サーバーからの応答は得られません。以下は私のクライアントとサーバーのコードです。サーバークライアントJAVAソケットプログラミングエラー

Serverコード

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

クライアントコードのこの部分に問題があります。これはpwstを送信し、次に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

修正しましたか?私のマシンでは動作していません。 –

関連する問題