社区
Java SE
帖子详情
JAVA怎么用程序知道局域网IP,
lonefeifei
2010-04-04 11:31:17
我想编个局域网聊天软件,但每次得输入对方IP才能连接,我想问怎么才能直接就显示出对方IP,象飞鸽传书那样显示?SOCKET使的,但我搞不出来了,求高手相助.......
...全文
377
25
打赏
收藏
JAVA怎么用程序知道局域网IP,
我想编个局域网聊天软件,但每次得输入对方IP才能连接,我想问怎么才能直接就显示出对方IP,象飞鸽传书那样显示?SOCKET使的,但我搞不出来了,求高手相助.......
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
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)
Java
局域网
IP
端口扫描
用
Java
写的一个小巧
程序
,
局域网
内,扫描开放指定端口的主机
用
Java
小
程序
实现
局域网
的访问控制策略.pdf
用
Java
小
程序
实现
局域网
的访问控制策略.pdf
JAVA
局域网
聊天
程序
JAVA
局域网
聊天
程序
聊天室
程序
基于
Java
使用 ARP 协议获取
局域网
内部活动主机的物理地址【100011074】
首先寻找并打开适合的网络适配器,然后根据输入的
局域网
IP
地址构造 ARP 的数据包,然后通过
Java
对网卡数据捕获需要用到 jpcap,jpcap 调用 wincap 实现数据包的发送,并监听返回的数据包,分析
局域网
内返回的活动主机的
IP
地址和物理地址并打印。
Java
实现简单的
局域网
聊天
程序
使用
JAVA
写的一个简单的多终端聊天
程序
,包含一个服务端和多个客户端。
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章