2017-08-25 6 views
-2

Ceci est mon programme serveur simple avec la classe ServerSocket de java.comment exécuter le serveur de configuration quand le port est args [0] en eclipse

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.Writer; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class SimpleServerSocketTest { 
    public static void main(String[] args) { 

     while (true) 
     { 
      try { 
       if (args.length != 1) { 
        System.err.println("Usage: java StartServer <port>"); 
        System.exit(1); 
       } 
       int port = Integer.parseInt(args[0]); 
       ServerSocket server = new ServerSocket(port); 

       System.out.println("Waiting for client...on " + port); 
       Socket client = server.accept(); 

       System.out.println("Client from /" + client.getInetAddress() + " connected."); 

       BufferedReader rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8")); 
       Writer out = new OutputStreamWriter(client.getOutputStream()); 

       String nameClient = rdr.readLine(); 
       System.out.println("Client " + nameClient + " wants to start a game."); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
}    

Je suis en train d'exécuter le serveur config mais il continue à dire ce « Utilisation: java StartServer ».

Je veux savoir comment puis-je configurer le port lorsque le port est args[0].

Ceci est d'ailleurs dans Eclipse.

Répondre

1

Si elle continue à dire "Utilisation: java StartServer" cela signifie donc ce code

System.err.println("Usage: java StartServer <port>"); 

est toujours été exécutée, ce qui signifie que la condition

args.length != 1 

est toujours vrai. Cela peut signifier args.length = 0 ou args.length> 1

Avez-vous fait passer Eclipse le numéro de port lors de l'exécution de votre application? C'est-à-dire avez-vous configuré les arguments de la ligne de commande à utiliser? Je ne suis pas une éclipse d'utilisateur donc je ne peux pas vous aider ici. Voir si ce tutoriel est utile http://www.concretepage.com/ide/eclipse/how-to-pass-command-line-arguments-to-java-program-in-eclipse ou vous pouvez essayer de trouver un autre tutoriel.

Assurez-vous également que vous n'avez pas passé trop d'arguments que nécessaire car cela rendra également la condition à true. Passez juste autant d'arguments pour faire la condition args.length! = 1 fail qui a 1 argument.

Vous pouvez également voir cette question avec l'aide de la configuration des arguments de ligne de commande dans Eclipse.

0

Ceci est ma pratique pour vous.

  1. Copiez et complétez votre code.

  2. Sélectionnez le menu en cliquant sur le bouton droit de la souris, Exécuter> Exécuter les configurations

enter image description here

  1. Sélectionnez l'onglet Arguments et tapez un numéro de port que vous voulez votre serveur à attendre la connexion du client puis, exécutez-le.

enter image description here

  1. test avec votre programme de socket client.

Ceci est ma pratique en utilisant la programmation socket client.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 
public class SimpleClientSocketTest { 
    public static void main(String[] args) { 
     BufferedReader rdr = null; 
     Socket sock = null; 
     PrintWriter out = null; 

     try{ 
      sock = new Socket("localhost", 9999); 

      rdr = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); 
      out = new PrintWriter(sock.getOutputStream(), true); 

      String toServer = "hello..."; 
      out.println(toServer + "i wants to start a game."); 

      String fromServer = rdr.readLine(); 
      System.out.println("server: " + fromServer); 

      if(fromServer == null) System.exit(0); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try { 
       rdr.close(); 
       out.flush(); 
       out.close(); 

       sock.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

    } 
} 

Envoyer un message au serveur d'abord,

out.println (toServer + « i veut commencer un jeu.");

puis, recevoir du serveur

chaîne fromServer = rdr.readLine(); System.out.println (." Server: "+ fromServer);

Il y a un

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class SimpleServerSocketTest { 
    public static void main(String[] args) { 

     if (args.length != 1) { 
      System.err.println("Usage: java StartServer <port>"); 
      System.exit(1); 
     } 
     int port = Integer.parseInt(args[0]); 
     ServerSocket server = null; 

     try { 
      server = new ServerSocket(port); 
     } catch (IOException e2) { 
      e2.printStackTrace(); 
     } 

     while (true) { 
      BufferedReader rdr = null; 
      PrintWriter out = null; 
      int clientConnectionCnt = 0; 

      try { 

       System.out.println("1Waiting for client...on " + port); 
       Socket client = server.accept(); 


       if(client.isConnected()) 
       { 

        System.out.println("Client from /" + client.getInetAddress() + " connected."); 
        String nameClient = null; 

        try { 
         rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8")); 
         out = new PrintWriter(client.getOutputStream(), true); 

         System.out.println("clientConnectionCnt....." + clientConnectionCnt++); 
         nameClient = rdr.readLine(); 
         out.println("Yes, You can"); 

         if(nameClient == null) break; 

         System.out.println("Client: " + nameClient); 

        } catch (IOException e) { 
         e.printStackTrace(); 

         break; 
        } finally { 
         out.flush(); 
         rdr.close(); 
         out.close(); 
         try { 
          client.close(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 

       } 

      } catch (IOException e) { 
       e.printStackTrace(); 

       break; 
      } 
     } 

     try { 
      server.close(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

    } 
} 
chose à vous dire au sujet de votre programme de serveur. Ceci est une version personnalisée de la vôtre.

Tout d'abord, vous devez créer un socket serveur en dehors de l'instruction while pas dans un moment.

try { 
    server = new ServerSocket(port); 
} catch (IOException e2) { 
    e2.printStackTrace(); 
} 

Attendez simplement dans une instruction while que le socket client accepte.

while (true) { 
.... skip ... 
    System.out.println("1Waiting for client...on " + port); 
    Socket client = server.accept(); 

Ensuite, créez un flux in/out de socket client.

rdr = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8")); 
out = new PrintWriter(client.getOutputStream(), true); 

Enfin, lisez et écrivez un message avec le flux du socket.

nameClient = rdr.readLine(); 
out.println("Yes, You can"); 

Cordialement, Rach.