如何打开用户java输入的端口
我有两个疑问 首先 我正在用netbeans创建一个桌面应用程序,我想打开一个由用户输入的端口。我在同一个包中创建了两个文件,从用户的一个文件中获取端口编号,并在上处理第二个文件 我已创建了该类的对象,用于获取用户输入的端口号,其未显示任何错误,但端口未打开,我已使用tcp视图检查了该端口号 这是第一个文件的代码 Server.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
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怀疑论者,我该怎么办?实际上,我正在创建服务器-客户机通信,用户可以使用指定的端口号启动服务器,打开用户输入的端口,但在控制台上,我继续使用端口,然后我无法使用应用程序,除非在任务管理器中关闭该任务……是的,它终于工作了,只是交换了成功的值