[求助]Socket通过wildcard ip(通配符)地址绑定的问题

zhlqiang 2008-03-07 10:25:06
代码片断如下:

...
ServerSocketChannel sessSvrSock = ServerSocketChannel.open();
InetSocketAddress isa = new InetSocketAddress(port); //wildcard ip
sessSvrSock.socket().bind(isa);
...

然后通过
sessSvrSock.socket().getLocalSocketAddress().toString() 


sessSvrSock.socket().getInetAddress().toString() 

获得的都是通配符ip地址(0.0.0.0),
请问如何才可以获得该socket实际绑定的ip地址呢?
(假设本机有多个ip地址,不能通过获取本机ip地址来确定)。
请各位达人多多指导!
...全文
311 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjleiqiang 2008-03-09
  • 打赏
  • 举报
回复
是在本机所有的ip均进行监听
Squall1009 2008-03-08
  • 打赏
  • 举报
回复
socket本身写的时候就可以一次绑定多个ip地址的。。。
zhlqiang 2008-03-08
  • 打赏
  • 举报
回复
多谢各位!
可能我表达的有问题,我的意思是说,下列代码:
sessSvrSock.socket().bind(isa); 

已经使得该socket绑定到了本机的一个ip地址和端口上,由于isa
初始化的时候没有指定ip地址,所以这时候不知道该socket实际上
绑定的ip地址。
我现在要做的就是看看如何才可以获得该socket现在绑定的ip地址,
这样客户端程序就可以连接该服务器了。
不知道我这样表达清楚了没,呵呵
乱码 2008-03-08
  • 打赏
  • 举报
回复
/**
* 获取本地主机上绑定的所有IP地址
* 需要JDK.5以上
* @return 本地主机上绑定的所有IP地址
*/
public static final Set<String> getLocalIps() {
Set<String> ips = new LinkedHashSet<String>();
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface
.getNetworkInterfaces();
while (interfaces != null && interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
Enumeration<InetAddress> addresses = networkInterface
.getInetAddresses();
while (addresses != null && addresses.hasMoreElements()) {
InetAddress addresse = addresses.nextElement();
String ip = addresse.getHostAddress();
if (!"127.0.0.1".equals(ip)) {
ips.add(ip);
}
}
}
} catch (SocketException e) {
log.warn("", e);
}

return ips;
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧