错误应用程序java客户端--server

时间:2016-10-22 12:29:41

标签: java sockets networking

你好我的应用程序java上有一个错误,这个应用程序从客户端向服务器发送值,服务器对接收到的值执行2的权限,并将其返回给客户端,一切正常,但它只能运行一次它播放一旦服务器不再接收值,我无法理解问题是什么,我该如何解决这个问题?代码在

之下

客户端:

    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);
         }  
    }


} 

服务器

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);
     }


   }

}

1 个答案:

答案 0 :(得分:0)

这可能与客户端正在其while循环中打开一个套接字然后不关闭它的事实有关。 服务器不知道套接字没有关闭,所以仍然等待它的输入。

尝试将客户端连接代码(下面)移到while循环之前。

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

此外,您的服务器的while循环应该有一种退出方式,因为目前退出的唯一方法是它是否会抛出异常,这不是理想的... 也许这样做,以便当客户端发送消息“关闭”时,它会断开连接。