社区
Java SE
帖子详情
JAVA怎么用程序知道局域网IP,
lonefeifei
2010-04-04 11:31:17
我想编个局域网聊天软件,但每次得输入对方IP才能连接,我想问怎么才能直接就显示出对方IP,象飞鸽传书那样显示?SOCKET使的,但我搞不出来了,求高手相助.......
...全文
370
25
打赏
收藏
JAVA怎么用程序知道局域网IP,
我想编个局域网聊天软件,但每次得输入对方IP才能连接,我想问怎么才能直接就显示出对方IP,象飞鸽传书那样显示?SOCKET使的,但我搞不出来了,求高手相助.......
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hebeiliuzhao0909
2010-04-05
打赏
举报
回复
扫描得到ip
KaneTing
2010-04-05
打赏
举报
回复
SEXING!!
whvc2010
2010-04-05
打赏
举报
回复
UPUPUPUPUP!
tcm441224375
2010-04-05
打赏
举报
回复
不懂得先顶个,关注
lonefeifei
2010-04-05
打赏
举报
回复
各位高手,给点指点啊,我可以加分的,急
lonefeifei
2010-04-05
打赏
举报
回复
还是没实现啊,可以把本机的IP给服务端,可要问题是怎么把IP给对方呢,因为还是不知道对方IP,有高手没啊,拜托
lonefeifei
2010-04-05
打赏
举报
回复
嗯,谢谢大家先,目前得到的方法是:先得到自己IP,然后用FOR语句从1到255(除自己的)依次测试下,可得到在线的连接。
p2p81
2010-04-05
打赏
举报
回复
如果仅是局域网的话可以这样。
1.获得本机Ip和子网掩码,这样就可以知道你所在的局域网会有多少个ip
2.逐个ip ping一下就可以知道哪些ip存在或机器开着。
这样不就得到了局域网内的所有机器的ip了吗
hejp029
2010-04-05
打赏
举报
回复
帮忙顶下!!
tdgwj
2010-04-04
打赏
举报
回复
不懂socket路过。。
xsj__2006
2010-04-04
打赏
举报
回复
楼主的头像在那里搞的,有电影没?
lonefeifei
2010-04-04
打赏
举报
回复
能不能给个程序啊?
零起跑线
2010-04-04
打赏
举报
回复
纯顶一下,为了每天的十分可以用分
rumlee
2010-04-04
打赏
举报
回复
向局域网广播消息就可以了。。。。。
kimiH
2010-04-04
打赏
举报
回复
在同一局域网获IP,没实现过!
lonefeifei
2010-04-04
打赏
举报
回复
嗯,感谢大家先,明天散分吧
justlearn
2010-04-04
打赏
举报
回复
其实飞鸽应该也不是直接找到对方ip的,对方信息是对方传过来的。
你要实现的方法建议这样处理:
1:当你登陆聊天软件,就向指定端口发出信息,包含自己的用户名、工作组、主机名、IP等
2:开始监听指定端口以得到其他用户登录的信息,然后刷新用户列表
justlearn
2010-04-04
打赏
举报
回复
这是个扫描局域网ip的windows解决方案,在unix系统下可能有问题
不知道是不是你需要的
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
public class LanIP {
public ArrayList<String> getLanIPArrayList() {
ArrayList<String> arrayIP = null;
try {
InitSystem initSystem = null;
initSystem = new InitSystem();
Thread thread = new Thread(initSystem);
thread.start();
thread.join();
arrayIP = initSystem.getArrayIPUsed();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return arrayIP;
}
private class InitSystem implements Runnable {
private int firstIP = 2;// 查询的 IP 地址的最后一位起始点
private int lastIP = 255;// 查询的 IP 地址的最后一位结束点
private volatile ArrayList<Thread> arrayThread;// 子线程段
private final int MAXTHREADNUM = 30; // 最大同时进行的子线程数量
private int threadNumNow;// 当前正在进行的子线程数量
private volatile ArrayList<String> arrayIP;// 局域网查询所有可能的 IP 地址的结果集
private volatile ArrayList<String> arrayIPUsed;// 局域网查询已经使用的 IP 地址的结果集
private InitSystem(String ip) {
arrayIP = new ArrayList<String>();
arrayIPUsed = new ArrayList<String>();
arrayThread = new ArrayList<Thread>();
setIPAddressList(ip);
}
private InitSystem() throws UnknownHostException {
this(InetAddress.getLocalHost().getHostAddress());
}
private synchronized ArrayList<String> getArrayIPUsed() {
try {
while (arrayIP.size() > 0) {
Thread.sleep(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return arrayIPUsed;
}
private void setIPAddressList(String ip) {
// 根据这个 ip 地址查询它所在的局域网的所有可能 IP 地址的集合
int lastPointIndex = ip.lastIndexOf('.');
String stringIPHead = ip.substring(0, ++lastPointIndex);
String stringIP = null;
for (int i = firstIP; i <= lastIP; i++) {
stringIP = stringIPHead + i;
arrayIP.add(stringIP);
}
}
public void run() {
synchronized (this) {
try {
while (arrayIP.size() > 0) {
while (threadNumNow >= MAXTHREADNUM) {
for (Thread thread : arrayThread) {
if (!thread.getState().equals(
Thread.State.TERMINATED)) {
thread.join(5);
}
--threadNumNow;
}
arrayThread = new ArrayList<Thread>();
}
Thread thread = new Thread(new InnerClass(arrayIP
.remove(0)));
thread.start();
threadNumNow++;
arrayThread.add(thread);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private class InnerClass implements Runnable {
// 线程查询一个 IP 是否是可以连接的 是则加入到相应的 IP 数组
private String ip;
private InnerClass(String ip) {
this.ip = ip;
}
private boolean isUsedIPAddress(String ip) {
synchronized (this) {
// 判断这个 IP 地址在当前局域网中是否是可连接的 IP
Process process = null;
BufferedReader bufReader = null;
String bufReadLineString = null;
try {
process = Runtime.getRuntime().exec(
"ping " + ip + " -w 100 -n 1");
bufReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
for (int i = 0; i < 6 && bufReader != null; i++) {
bufReader.readLine();
}
bufReadLineString = bufReader.readLine();
if (bufReadLineString == null) {
process.destroy();
return false;
}
if (bufReadLineString.indexOf("timed out") > 0
|| bufReadLineString.length() < 17
|| bufReadLineString.indexOf("invalid") > 0) {
process.destroy();
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
process.destroy();
return true;
}
}
public void run() {
synchronized (this) {
if (isUsedIPAddress(ip)) {
arrayIPUsed.add(ip);
}
}
}
}
}
}
lonefeifei
2010-04-04
打赏
举报
回复
不是啊,我能得到自己IP,可对方IP不知道啊,怎么连接发消息啊?得先得到对方IP啊
justlearn
2010-04-04
打赏
举报
回复
InetAddress.getLocalHost().getHostAddress();
注意catch Exception
加载更多回复(5)
相关推荐
基于UDP协议的
局域网
聊天
程序
基于UDP协议的
局域网
聊天
程序
。vc++6.0编写。点对点模式。运行
程序
后输入对方机器
IP
地址,即可进行聊天。单台计算机可以测试。测试
Ip
:127.0.0.1(大家应该都
知道
)
上兴远控原理疑问
(1)关于端口映射 这个映射的端口是指的路由器上的端口?还是我主机上的端口? (2)关于生成木马的服务器端的
程序
,为什么服务器端的
程序
只用
知道
我的外网
ip
就可以了? 这个端口号的作用又是什么? 然后我之前在
java
下用server和client 套接字写
局域网
聊天工具时,我的client必须
知道
server的
ip
才可以连接,而这个却相反,server
知道
了client的
ip
基于
JAVA
的ARP欺骗的
程序
实现
在实现ARP欺骗之前,我们必须
知道
什么是ARP。 在
局域网
当中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须要
知道
对方的
IP
地址,但仅仅有
IP
地址是不够的,因为
IP
数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从
IP
地址到物理地址的映射。ARP就是实现这个功能的协议。 我们通过一个简单的例子来解释一下ARP在
局域网
中的运
网络技术之
局域网
及网络故障排除
如何快速解决复杂的
局域网
故障,使
局域网
恢复令人满意的服务,已成为一个十分重要的课题。本课程将让大家在熟悉
局域网
共享技术的基础上能够独立排除
局域网
方面的故障。我们的知识点将从第2章开始讲起,第1章为概述,让大家
知道
本套课程的知识点有哪些,自己在以前是否已经掌握了这些知识点,如已掌握则可跳过本课程学习。课程编排重在实用,讲解通俗易懂。让您在短期的时间内学会最需要的知识点,为您节省宝贵的时间。
H3CNE认证网络工程师视频课程
网络基础知识、OSI七层参考模型、TCP/
IP
模型。
IP
子网划分及主要TCP/
IP
协议的工作原理。典型
局域网
、广域网技术。路由器和以太网交换机工作原理和基本配置方法。
IP
路由和路由协议原理及配置。用访问控制列表进行包过滤。地址转换的原理及配置。
Java SE
62,567
社区成员
307,521
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告