2016-10-22 5 views
0

こんにちは私はアプリケーションJavaでエラーが発生しました。このアプリケーションはクライアントからサーバーに値を送信し、サーバーは受信した値に対して2の累乗を実行してクライアントに返します。それはサーバーがもはや価値を受け取っていない一度再生した後に一度だけ動作し、私は問題が何であるか理解できません、どうすればこの問題を解決できますか?以下のコードは、あるエラーアプリケーションjavaクライアント-server

CLIENT:

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

public class Client{ 

    public static void main(String args[]){ 

      try{ 

      //controllo che i valori siano corretti  
      /* if(args.lenght != 2){ 
       System.out.println(" Errore la sintassi "); 
       System.exit(1); 
       } 
      */ 
      String host=""+args[0]; 
      int port=Integer.parseInt(args[1]); 
     // System.out.println("\n Scriverò sul socket "+host); 
     // System.out.println("\n Porta: "+port);  

      //leggo valori da input 

      BufferedReader input=new BufferedReader(new InputStreamReader(System.in));   

      System.out.println("\n Inserisci un valore (CLIENT): "); 
      String lettura=input.readLine(); 

      while(!lettura.equals("fine")){ 

      System.out.println("\n Inserisci un valore (CLIENT): "); 
      Socket s=new Socket(host,port); 
      PrintWriter output=new PrintWriter(s.getOutputStream()); 
      output.println(lettura); 
      output.flush(); 

      //attendo dal server il risultato 
      BufferedReader insok = new BufferedReader(new InputStreamReader(s.getInputStream()));  
      String lettsock=insok.readLine(); 
     //System.out.println(" Ho ricevuto dal server il valore "+insok.readLine()); 
      System.out.println("\n Ho ricevuto dal server : "+lettsock); 

      lettura=input.readLine();  
     } 

      // System.out.println("\n Client Terminato con successo \n"); 

      //chiusura input 
      input.close(); 
     } 

     catch(Exception ex){ 
      System.out.println("\n Errore: " + ex); 
      System.exit(2); 
     } 
    } 


} 

SERVER:

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


public class Server{ 

    static final int PORT = 1024; 

    public static void main(String args[]){ 

    try{ 

     ServerSocket ss=new ServerSocket(PORT); 

      while(true) { 
       Socket ns = ss.accept(); 
       BufferedReader networkIn = new BufferedReader(new InputStreamReader(ns.getInputStream())); 
       PrintWriter networkOut=new PrintWriter(ns.getOutputStream()); 
       String line; 
       System.out.println("\n Attendo valori \n "); 
       while ((line = networkIn.readLine()) != null) { 

        System.out.println("Ricevuto: " + line); 
        try{ 
        int number=Integer.parseInt(line); 
        number=number*number; 
        networkOut.println(number); 
        networkOut.flush(); 
        } 
        catch(Exception ex){ 
        System.out.println("\n Non mi hai inviato un numero \n"); 
        } 
       } 

       ns.close(); 
      } 


    } 
    catch(Exception ex){ 

     System.out.println("\n Errore Server: "+ex); 
     System.exit(2); 
    } 


    } 

} 

答えて

0

これは、クライアントがそのwhile内のソケットを開いているという事実に関係する可能性がありますループして閉じないでください。
サーバーは、ソケットが閉じられていないことを認識しておらず、まだソケットからの入力を待ちます。

whileループの前にクライアント接続コード(下記)を移動してみてください。

Socket s=new Socket(host,port); 
PrintWriter output=new PrintWriter(s.getOutputStream()); 
BufferedReader insok = new BufferedReader(new InputStreamReader(s.getInputStream())); 

また、サーバーのwhileループは本当に...それは理想的ではない例外をスローした場合、現在、それが終了することができる唯一の方法である、退出の道を持っている必要があり は多分ようにそれを作りますクライアントが「close」というメッセージを送信すると、クライアントは切断されます。

+0

ありがとうございます –

関連する問題