2016-10-22 41 views
0

你好,我在我的应用程序java上有一个错误,这个应用程序发送客户端到服务器的值,服务器执行2的权力收到价值,并返回给客户端,一切正常,但是一旦服务器不再接收数值,它只会播放一次,我不明白问题所在,我该如何解决这个问题?代码如下错误应用程序java客户端-server

客户:

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

谢谢你的开始 –