如何在eclipse中的端口为args [0]时运行配置服务器

问题描述:

这是我的简单服务器程序,使用java的ServerSocket类。如何在eclipse中的端口为args [0]时运行配置服务器

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

我试图运行配置服务器 但它口口声声说此“用法:JAVA startserver的”。

我想知道如何配置端口,当端口是args[0]。顺便说一句,这是在Eclipse中。

如果口口声声说 “用法:JAVA的startserver” 因此它意味着这个代码

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

是始终执行,这意味着病情

args.length != 1 

始终是真实的。这可能意味着args.length = 0或args.length> 1

您是否在运行应用程序时让eclipse传递端口号?那是你配置了要使用的命令行参数吗?我不是一个用户的日食,所以我不能帮你在这里。查看本教程是否有帮助http://www.concretepage.com/ide/eclipse/how-to-pass-command-line-arguments-to-java-program-in-eclipse或者您可以尝试找到其他教程。

还要确保你没有传递太多的参数,因为这也会使条件返回true。只要传递尽可能多的参数就可以使条件args.length!= 1失败,它有1个参数。

你也可以在eclipse中配置命令行参数来帮助你看到这个问题。

这是我的做法。

  1. 复制并完成您的代码。

  2. 选择菜单点击鼠标,运行>运行配置的右键

enter image description here

  1. 选择参数选项卡,然后键入任何你想要的端口号你的服务器等待客户端连接,然后运行它。
  2. enter image description here

    1. 与你的客户套接字程序测试它。
    2. 这是我使用客户端套接字编程的做法。

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

      将消息发送给服务器首先,

      通过out.println(toServer +“我要开始游戏。“);

      然后,接收从服务器

      字符串fromServer = rdr.readLine(); 的System.out.println(” 服务器:“+ fromServer);

      有一两件事要告诉你关于你的服务器程序。 这是你的一个定制版本。

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

      首先,你应该在while语句之外创建一个服务器套接字。

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

      只是在while语句的util客户端套接字等待接受。

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

      然后,创建客户端套接字的输入/输出流。

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

      最后,用套接字流读写消息。

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

      问候,拉赫。

    开始=>
开始=>