在我的机器上,以下代码在Eclipse中编译,但在Netbeans中抛出异常,错误消息为“线程“main”java.net.BindException中的异常:地址“”已在使用中。
在Netbeans中什么是正确的配置来编译这段代码呢?看起来问题与我有两个主要函数的事实有关。如果我开始运行其中一个应用程序,第二个应用程序将无法启动,并抛出上面发布的异常。
Server.java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
Server myServ = new Server();
myServ.run();
}
public void run() throws Exception {
ServerSocket mySS = new ServerSocket(9999);
Socket SS_accept = mySS.accept();
InputStreamReader mySR = new InputStreamReader(SS_accept.getInputStream());
BufferedReader myBR = new BufferedReader(mySR);
String temp = myBR.readLine();
System.out.println(temp);
}
}
Client.java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
Client myCli = new Client();
myCli.run();
}
public void run() throws Exception {
Socket mySkt = new Socket("localhost", 9999);
PrintStream myPS = new PrintStream(mySkt.getOutputStream());
myPS.println("Hello server");
}
}
6条答案
按热度按时间oprakyz71#
问题是由于您让服务器的一个示例保持运行,然后启动另一个示例。
von4xj4u2#
实现我想要的方法是右键单击我想要运行的特定类(例如
Server.java
)并选择“Run this file”。这使我能够只运行服务器应用程序。然后,对另一个文件Client.java
执行相同的过程。然而,Netbeans在这种特殊的情况下有点令人困惑/欺骗。Netbeans所做的是运行
Server
进程,但将该进程标记为项目的名称(例如MyTestNetworkingProject),并在其上放置一个运行编号,从而为我们提供MyTestNetworkingProject run #1
(它实际上忽略了第一个进程上的#1)Client.java。运行此文件”“,它会生成第二个进程MyTestNetworkingProject run #2
。然后,它会在屏幕底部生成第二个结果窗口,因为它会在创建新进程时在新选项卡中生成这些结果。由于我的特定代码的性质,我希望在结果窗口中看到的是www.example.com结果窗口,以确认我的应用程序正在运行Server.java(在本例中为
MyTestNetworkingProject run #1
)。根据我上面列出的运行不同文件的确切步骤顺序,运行#2是最后一个运行进程,因此是顶部的选项卡,我可以点击运行#1,然后在控制台中看到我希望看到的结果(“Hello server”),但我只需要知道/记住MyTestNetworkingProject run #1
代表的是服务器应用程序,而不是客户端应用程序。不酷,海事组织。
zlhcx6iw3#
如果你在Windows操作系统下写这个程序,你可以用“netstat -nao”来查看哪个进程使用9999端口。如果是一些不重要的进程,你可以杀死这个进程。否则你可以改变程序的端口。
pepwfjgg4#
我更改了端口地址,它在Neat Beans IDE中为我工作。如果我们多次使用相同的端口地址,则会出现此问题。因此,要修复此错误,您必须更改端口地址,我确信它会工作
k2fxgqgv5#
Server.java
Client.java
参考上面的代码,它为我工作。
9vw9lbht6#
我确实尝试了
catch
方法,解决了这个问题。