请教各位大侠:java中能否有方法返回本机空闲端口号? 小弟目前在做的这个东东需要许多端口进行通信,想请教一下,java中可否有办法返回系统中暂时未用到的端口号?如有,如何做? 感激不尽!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java可以调用系统命令,WIN系统好像有个命令,列出了有哪些端口被占用了.你可以试试这个方法. public int getFreePort(){//获取空闲端口 ServerSocket tmp; int i=MINPORT; for(;i<=MAXPORT;i++){ try{ tmp=new ServerSocket(i); tmp.close(); tmp=null; return i; } catch(Exception e4){ System.out.println("端口"+i+"已经被占用"); } } return -1; }在[MINPORT,MAXPORT]端口范围内获取空闲端口 public static boolean isOpenPort(String ip,int port){ boolean bl = false; try { Socket socket = new Socket(ip, port); bl = true; socket.close(); socket = null; } catch (IOException ex) { //ex.printStackTrace(); bl = false; } return bl; } 用cseu(飘) 和lanlanq(麒麟在天) 均可 netstat -na返回正在使用的端口! 没有这样的必要吧,你完全可以new ServerSocket(0).getLocalPort() 来返回这个ServerSocket已经绑定到的端口 用cseu(飘) 和lanlanq(麒麟在天) 均可 写了一个,不过是单线程扫描比较慢。----------------------------import java.net.*;import java.io.*;public class PortScanner{ public static void main(String args[]){ String hostName; int lowerPort=0; //扫描起始端口; int upperPort=1024; //扫描终止端口; if(args.length>0) hostName=args[0]; else hostName="localhost"; for(int i=lowerPort;i<=upperPort;i++){ try{ Socket mysocket ; mysocket=new Socket(hostName,i); System.out.println("端口 "+i+" 被占用!"); }catch(IOException e){ System.out.println(e.getMessage()); } } }} 最近总发现有人原封不动地抄人家的回帖,比如前面的 sundeveloper(51TTUP),难道是机器人?!~~ lanlanq(麒麟在天) 的方法不太好 lanlanq(麒麟在天)的不对,因为是服务器端。药用ServerSocket。cseu(飘) 的可以,当不能简单的用Exception,例外因该分的详细一些。BindException() SocketException()IOException()等。 请问你cold_blooded(三天没吃饭)有没有使用到一个极其去测试另一台机器的端口是否打开。楼主页没有指明只是服务器端进行测试查找,况且就是在服务器端也是可以的,我的方法,我的系统中也使用到辽,是正确的。你测试了吗,怎么能说不对那,难道只有serverSocket才能进行查找端口吗,观点太过片面。最好试验后拿出有力证据在否定别人的。 况且你调用一个serversocket是要损耗服务器资源的,如果很多客户端去执行这个操作,会对服务器的增加服务器端的负载,我感觉还是由客户端进行处理这个比较好,这样可以减轻服务器端的压力,我感觉还是这样比较好。 cold_blooded(三天没吃饭) 希望你测试以后再说,难道服务器端只能使用ServerSocket吗,难道只会出现服务器自己去查找端口吗。片面! 布局问题!!! 想请问大家,为什么我的这个conn.java在执行javac conn.java时出错,说什么“SQL”不存在什么的。。。。 一个可能有点菜的HashMap问题 找不到javax,哪里设置错了? 怎么提高JAVA的兴趣? 问一个美国cs研究生作业 thinking in java中线程例子求教 applet初始化问题!简单 取得对象数组的内部锁,是否也意味着取得每个对象的内部锁? 能在window ce 中开发java程序吗? 怎么使static变量还原到刚刚装载class时的状态 一个奇怪的问题向大家请教
WIN系统好像有个命令,
列出了有哪些端口被占用了.
你可以试试这个方法.
ServerSocket tmp;
int i=MINPORT;
for(;i<=MAXPORT;i++){
try{
tmp=new ServerSocket(i);
tmp.close();
tmp=null;
return i;
}
catch(Exception e4){
System.out.println("端口"+i+"已经被占用");
}
}
return -1;
}
在[MINPORT,MAXPORT]端口范围内获取空闲端口
boolean bl = false;
try {
Socket socket = new Socket(ip, port);
bl = true;
socket.close();
socket = null;
} catch (IOException ex) {
//ex.printStackTrace();
bl = false;
}
return bl;
}
----------------------------
import java.net.*;
import java.io.*;
public class PortScanner{
public static void main(String args[]){
String hostName;
int lowerPort=0; //扫描起始端口;
int upperPort=1024; //扫描终止端口;
if(args.length>0)
hostName=args[0];
else
hostName="localhost";
for(int i=lowerPort;i<=upperPort;i++){
try{
Socket mysocket ;
mysocket=new Socket(hostName,i);
System.out.println("端口 "+i+" 被占用!");
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
}
cseu(飘) 的可以,当不能简单的用Exception,例外因该分的详细一些。
BindException()
SocketException()
IOException()
等。