2013-03-10 90 views
0

我想提出一个条件,当用户输入的端口号小于1024时,它会要求他们再试一次。我知道如何做一个if语句和一个简单的while循环,但不太确定如何做到这一点。Java - 服务器端口号重试

import java.net.ServerSocket; 

class Server { 
    public void start (int num) throws Exception { 
     ServerSocket server = new ServerSocket(num); 
     if(num < 1024){ 
      ServerSocket server = new ServerSocket(num); 
     } 
    } 
} 

但是,这是错误的。我知道也许一个while循环是一个使用,但我尝试了类似的方法,但仍然错误。如果用户输入一个小于1024的数字,它会要求他们再次输入数字。继续这样做直到数字> = 1024。

谢谢。

+0

提示:确保您将用户界面与主要功能的设计分离。这是一个非常重要的设计原则,它应该适用于任何应用程序,但最基本的工具(或者在开始创建实际应用程序之前快速混搭)。 – 2013-03-10 14:16:39

回答

1

num < 1024时,您可以丢弃IllegalArgumentException。此方法的调用者应该使用try ... catch块(也许在一个循环中重试)

调用者可以使用:

Server s = new Server; 
int maxRetries = 10; 
int retry = 0; 
while(retry < maxRetries){ 
    try { 
     retry++; 
     // Read value to num somehow (scanner maybe) 
     s.start(num); 
    catch (IllegalArgumentException e){ 
     // print error string 
    } 
} 
+0

keeprun是如何使用的?我做了'if(num <1024){start(num);}'然后'catch(Exception e)',但是这让我回到了原来的方式,因为在弹出错误消息之后,它不会告诉我重试输入再次。 – Dembele 2013-03-10 14:09:41

+0

根据允许的最大重试次数添加了一个选项。 – BobTheBuilder 2013-03-10 14:15:13

1
public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    int port = scanner.nextInt(); 
    while (port < 1024) { 
     System.out.println("Please enter a valid port"); 
     port = scanner.nextInt(); 
    } 
    System.out.println("Port is "+port); 
    //Put the logic here to start the server socket. 
} 

试试这个,请用您的值扫描仪的一部分。

1

你只需要扫描仪类。请参阅http://www.homeandlearn.co.uk/java/user_input.html

Scanner user_input = new Scanner(System.in); 
int portEntered=user_input.nextInt(); 
while(user_input<1024) 
{ 
// message stating user has entered number less than 1024 using sysout 
portEntered= user_input.nextInt(); 
} 
0

我不打扰测试这种情况。只要尝试创建ServerSocket,并且如果它抛出BindException为任何原因重新提示用户并重试。

+0

不支持小于1024的端口号检查不是一个好主意吗?该端口范围(<1024)不应该被程序员定义。 它由IANA保留。 – 2013-03-12 04:26:01