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

时间:2017-08-25 00:02:51

标签: java eclipse serversocket

这是我使用java ServerSocket类的简单服务器程序。

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中。

2 个答案:

答案 0 :(得分:1)

如果它一直说“Usage:java StartServer”,则表示此代码

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

始终执行,这意味着条件

args.length != 1 

总是如此。这可能意味着args.length = 0或args.length&gt; 1

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

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

您还可以通过在eclipse中配置命令行参数来查看此问题。

答案 1 :(得分:0)

这是我的练习。

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

  2. 选择鼠标右键单击菜单,运行&gt;运行配置

  3. enter image description here

    1. 选择Arguments选项卡并输入端口号,无论您希望服务器等待客户端连接,然后运行它。
    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 +&#34;我想开始游戏。&#34;);

        然后,从服务器接收。

          

        String fromServer = rdr.readLine();   System.out.println(&#34;服务器:&#34; + 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");
        

        问候,拉赫。