如何打开用户java输入的端口

如何打开用户java输入的端口,java,swing,netbeans,port,Java,Swing,Netbeans,Port,我有两个疑问 首先 我正在用netbeans创建一个桌面应用程序,我想打开一个由用户输入的端口。我在同一个包中创建了两个文件,从用户的一个文件中获取端口编号,并在上处理第二个文件 我已创建了该类的对象,用于获取用户输入的端口号,其未显示任何错误,但端口未打开,我已使用tcp视图检查了该端口号 这是第一个文件的代码 Server.java package server; import java.io.*; import java.net.*; import javax.s

我有两个疑问

首先

我正在用netbeans创建一个桌面应用程序,我想打开一个由用户输入的端口。我在同一个包中创建了两个文件,从用户的一个文件中获取端口编号,并在上处理第二个文件

我已创建了该类的对象,用于获取用户输入的端口号,其未显示任何错误,但端口未打开,我已使用tcp视图检查了该端口号

这是第一个文件的代码

Server.java

 package server;
    import java.io.*;
    import java.net.*;
    import javax.swing.JFrame;

    public class Server extends Thread {
      public static int SERVERPORT;
      private boolean running = false;
      public volatile boolean stop = false;
      public Socket client = null;

    public static void main(String[] args) {
        mainFrame frame = new mainFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        SERVERPORT = frame.portnum;//here i am getting port number from 2nd file
    }

    @Override
    public void run() {
        super.run();
        running = true;
        try {
            System.out.println("Server Has Started........ \n Waiting for client........");
            ServerSocket serverSocket = new ServerSocket(SERVERPORT);
            try {
                while (!stop && running) {
                    client = serverSocket.accept();
                    System.out.println("Connection Accepted......");
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    String usercmnd = in.readLine();
                    if (usercmnd != null) {
                        Runtime runtime = Runtime.getRuntime();
                        Process p = runtime.exec(usercmnd);
                    }
                }
package server;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.net.*;
//import server.Server;


/**
 *
 * @author admin
 */
public class mainFrame extends JFrame {
private Server  mServer;
public int portnum;
   public mainFrame() {
        super("mainFrame");
        mServer = new Server();
        initComponents();
        setIcon();labInfo.setText("Not Connected");
        try{ ipAdd.setText(String.valueOf(InetAddress.getLocalHost().getHostAddress()));
        }catch(Exception e){labInfo.setText(e.getMessage());}

    }


    private void connActionPerformed(java.awt.event.ActionEvent evt) {                                     
        if(port.getText().equals(""))
        {
           labInfo.setText("Port number cannot be empty!!");
        }else{
            portnum=Integer.parseInt(port.getText());//here i am getting user's entered port number
            conn.setEnabled(false);port.setEditable(false);
            labInfo.setText("Waiting for Connection.....");
            mServer.start();
        }
    }                                    

    private void disconnActionPerformed(java.awt.event.ActionEvent evt) {                                        
        mServer.requestStop();
        labInfo.setText("Not Connected");
        port.setEditable(true);
        conn.setEnabled(true);        
    }                                       
这里是第二个文件,用户必须在其中输入端口号

mainFrame.java

 package server;
    import java.io.*;
    import java.net.*;
    import javax.swing.JFrame;

    public class Server extends Thread {
      public static int SERVERPORT;
      private boolean running = false;
      public volatile boolean stop = false;
      public Socket client = null;

    public static void main(String[] args) {
        mainFrame frame = new mainFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        SERVERPORT = frame.portnum;//here i am getting port number from 2nd file
    }

    @Override
    public void run() {
        super.run();
        running = true;
        try {
            System.out.println("Server Has Started........ \n Waiting for client........");
            ServerSocket serverSocket = new ServerSocket(SERVERPORT);
            try {
                while (!stop && running) {
                    client = serverSocket.accept();
                    System.out.println("Connection Accepted......");
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    String usercmnd = in.readLine();
                    if (usercmnd != null) {
                        Runtime runtime = Runtime.getRuntime();
                        Process p = runtime.exec(usercmnd);
                    }
                }
package server;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.net.*;
//import server.Server;


/**
 *
 * @author admin
 */
public class mainFrame extends JFrame {
private Server  mServer;
public int portnum;
   public mainFrame() {
        super("mainFrame");
        mServer = new Server();
        initComponents();
        setIcon();labInfo.setText("Not Connected");
        try{ ipAdd.setText(String.valueOf(InetAddress.getLocalHost().getHostAddress()));
        }catch(Exception e){labInfo.setText(e.getMessage());}

    }


    private void connActionPerformed(java.awt.event.ActionEvent evt) {                                     
        if(port.getText().equals(""))
        {
           labInfo.setText("Port number cannot be empty!!");
        }else{
            portnum=Integer.parseInt(port.getText());//here i am getting user's entered port number
            conn.setEnabled(false);port.setEditable(false);
            labInfo.setText("Waiting for Connection.....");
            mServer.start();
        }
    }                                    

    private void disconnActionPerformed(java.awt.event.ActionEvent evt) {                                        
        mServer.requestStop();
        labInfo.setText("Not Connected");
        port.setEditable(true);
        conn.setEnabled(true);        
    }                                       


有没有办法检查输入的端口号当前正在使用,这样我们就可以提醒用户使用另一个端口号

我建议您首先运行
大型机
类,通过单击
按钮
可以调用
服务器
类来检索在
文本字段
中输入的端口号。我似乎无法帮助您编写完整的代码,但您可以将
conactionperformed()
方法更改为

   private void connActionPerformed(java.awt.event.ActionEvent evt) {
        boolean success = false;
        do {
            try {
                if (port.getText().equals("")) {
                    labInfo.setText("Port number cannot be empty!!");
                } else {
                    portnum = Integer.parseInt(port.getText());//here i am getting user's entered port number
                    ServerSocket serverSocket = new ServerSocket(portnum);
                    System.out.println("Connected to Server");
                    mServer = new Server(serverSocket);//Which means you need to implement a constructor with a Server argument.

                    //conn.setEnabled(false);
                    //port.setEditable(false);
                    //abInfo.setText("Waiting for Connection.....");
                    mServer.start();
                    success = true;
                }

            } catch (BindException ex) {
                System.out.println("Port in use");
            }
        } while (success);

    }
然后您可以实现如下构造函数:

    ServerSocket serverSocket;
    public Server(ServerSocket serverSoket){
        this.serverSocket = serverSoket;
    }
注意:由于此代码不完整,请根据需要进行操作。
希望这会有帮助,谢谢。

对不起,这听起来是个糟糕的主意。允许用户打开他们想要的任何端口似乎都不安全。如果我是你,我会重新设计。我想你对GUI的工作原理有误解。显示窗口时,任何字段中都没有该值。只有将更改事件分派到该字段时,才具有该值。因此,在
SERVERPORT=frame.portnum
行中,您在
SERVERPORT
中没有任何值,因为没有任何东西可以将
portnum
设置为任何值。@real怀疑论者,我该怎么办?实际上,我正在创建服务器-客户机通信,用户可以使用指定的端口号启动服务器,打开用户输入的端口,但在控制台上,我继续使用端口,然后我无法使用应用程序,除非在任务管理器中关闭该任务……是的,它终于工作了,只是交换了成功的值