Java-服务器端口号重试

Java-服务器端口号重试,java,sockets,while-loop,Java,Sockets,While Loop,我想设定一个条件,当用户输入的端口号小于1024时,它会要求他们再试一次。我知道如何执行if语句和简单的while循环,但不太确定如何执行 import java.net.ServerSocket; class Server { public void start (int num) throws Exception { ServerSocket server = new ServerSocket(num); if(num < 1024){

我想设定一个条件,当用户输入的端口号小于1024时,它会要求他们再试一次。我知道如何执行if语句和简单的while循环,但不太确定如何执行

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);
        }
    }
}
导入java.net.ServerSocket;
类服务器{
public void start(int num)引发异常{
ServerSocket服务器=新的ServerSocket(num);
if(num<1024){
ServerSocket服务器=新的ServerSocket(num);
}
}
}
然而,这是错误的。我知道可能需要使用while循环,但我尝试了类似的方法,但仍然存在错误。如果用户输入的数字小于1024,则会要求他们再次输入数字。继续这样做,直到数字>=1024


谢谢。

您可以在
num<1024
时抛出
illegargumentexception
。此方法的调用方应使用try。。捕获块(可能在要重试的循环内)

调用方可以使用:

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
    }
}
Server s=新服务器;
int maxRetries=10;
int重试=0;
while(重试<最大重试次数){
试一试{
重试++;
//以某种方式将值读取到num(可能是扫描仪)
s、 开始(num);
捕获(IllegalArgumentException e){
//打印错误字符串
}
}

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
    }
}
Server s=新服务器;
int maxRetries=10;
int重试=0;
while(重试<最大重试次数){
试一试{
重试++;
//以某种方式将值读取到num(可能是扫描仪)
s、 开始(num);
捕获(IllegalArgumentException e){
//打印错误字符串
}
}
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
int port=scanner.nextInt();
while(端口<1024){
System.out.println(“请输入有效端口”);
端口=scanner.nextInt();
}
System.out.println(“端口为”+端口);
//将逻辑放在这里以启动服务器套接字。
}
尝试此操作,用您的值替换扫描仪部件。

publicstaticvoidmain(String[]args){
扫描仪=新的扫描仪(System.in);
int port=scanner.nextInt();
while(端口<1024){
System.out.println(“请输入有效端口”);
端口=scanner.nextInt();
}
System.out.println(“端口为”+端口);
//将逻辑放在这里以启动服务器套接字。
}

尝试此操作,用您的值替换扫描仪部件。

您只需要扫描仪类。请参阅

扫描仪用户输入=新扫描仪(System.in);
int portEntered=user_input.nextInt();

而(用户输入您只需要scanner类。请参阅

扫描仪用户输入=新扫描仪(System.in);
int portEntered=user_input.nextInt();

虽然(用户输入我不需要测试这种情况。只要尝试创建ServerSocket,如果它出于任何原因抛出BindException,则重新提示用户并重试。

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

如何操作是否使用keeprun?我使用了“if(num<1024){start(num);}”然后是“catch(Exception e)”,但这让我回到了第一步,因为在错误消息弹出后,它不会告诉我再次重试输入num。添加了一个基于允许的最大重试次数的选项。如何使用keeprun?我使用了“if(num<1024){start(num);}”然后是“catch(Exception e)”'但这让我回到了起点,因为在弹出错误消息后,它不会告诉我再次重试输入num。添加了一个基于允许的最大重试次数的选项。提示:确保将用户界面与主要功能的设计分离。这是一个非常重要的设计原则,适用于任何应用程序但最基本的工具(或在开始创建实际应用程序之前的快速mashup)提示:确保用户界面与主要功能的设计分离。这是一个非常重要的设计原则,适用于除最基本工具以外的任何应用程序(或者在您开始创建实际应用程序之前进行快速mashup)。检查端口号小于1024不是一个好主意吗?该端口范围(检查端口号小于1024不是一个好主意吗?该端口范围)(
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();
}