其实就是在外网搞一个服务器,然后用java去访问这个服务器,然后服务器就能获取到你的外网ip,只需要对数据进行解析。服务器可以自己架设或者网上也有很多提供这样服务的网站,如各种的查ip的网站都有显示自己外网ip的功能。下边是个例子,可以直接运行
import javaioBufferedReader;
import javaioInputStreamReader;
import javanetURL;
public class ListIP {
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
Systemoutprintln("本机的外网IP是:"+ListIPgetWebIp(">
以下以WINDOW *** 作系统为例。LINUX的思路相同。
1,在E;\下建立如下两个bat文件,内容分别如下:
e:\setip1bat文件内容:
rem 设置IP、子网掩码、默认网关
c:
cd \
netsh exec e:\setipbat
另一个文件e:\setipbat文件内容:
interface
ip
set address "本地连接" static 1921681111 2552552550 19216811
exit
2,执行脚本命令的JAVA程序
单线程 破解ip屏蔽 比较容易 只要拨号就行了
多线程抓取数据也比较容易 但是引入多线程之后 拨号就容易出现问题
多线程抓取的时候 这个拨号就比较麻烦一点 因为 多线程拨号
会出现 第一个线程拨号的时候 第二个线程也同时进入拨号 第三个 个 同样会进入 这样会导致线程一直在拨号 导致无限循环
怎么控制这个拨号同步 达到较高的效率呢
本人是新手 采用了比较简单的方法
就是 第一个开始拨号 就告诉后面的 我已经在拨号了
你们反正抓取不了数据 那就先等一等 等我第一个拨号完毕 大家所有线程在进行下一轮的循环抓取数据
线程类
其中
AdslThead isadsl = true; 就是用来设置 告诉后面的线程 已经有人在拨号了
package yjf util;
import java util Date;
import java util List;
public class GetWebThread extends Thread{
/
线程
/
public void run(){
try {
while (true) {
int day = ;
long time = new Date() getTime()
//用来同步抓取线程
synchronized( searchthead ){
Main thisdaycount++;
if(Main thisdaycount>Main daycount){
break;
}
System out println( 开始查询第 +(Main thisdaycount)+ 天 )
Thread sleep( )
day = Main thisdaycount ;
}
//获取抓取的时间
String datetext = TimeUtil date format(TimeUtil addDaysForDate(day))
String[] txt =FileUtil getCityByTxtFile()
for(int t= ;t<txt length;t++){
String[] way = txt[t] split( \\| )
String start = way[ ];
String end = way[ ];
//抓取到的数据列表
List<DataBean> datalist = Main getDataList(datetext start end)
if(datalist!=null){
Main isadsl = ;
CheckAdsl adsllasttime = new Date() getTime()
FileUtil addDataToFileCsv(datalist)
Main log printLog( ==== +datetext+ = +start+ = +end+ = +t+ =数据总数 +datalist size())
}else{
Thread sleep( )
AdslThead isadsl = true;
Thread sleep( )
//判断是否正在拨号 并暂停线程
while (AdslThead isadsl) {
Thread sleep( )
}
t ;
}
}
long time = new Date() getTime()
Main log printLog(datetext+ ==查询完毕=========耗时 +(time time ))
}
} catch (Exception e) {
Main log printLog(e getMessage())
e printStackTrace()
}
}
}
拨号监听线程
package yjf util;
import java util Date;
import java util TimerTask;
public class AdslThead extends TimerTask{
public static boolean isadsl = false;
@Override
public void run() {
try {
if(isadsl){
System out println( 拨号线程线程启动 )
ConnectAdslNet reconnectAdsl( 宽带 Main adslname Main adslpass)
isadsl = false;
}
} catch (Exception e) {
System out println(e getMessage())
}
}
}
启动拨号监听程序 每隔一段时间 循环一次 这样稳定性 准确性更高
Timer adsl=new Timer()
lishixinzhi/Article/program/Java/hx/201311/25815
//获取ip地址
public String getLocalIpAddress()
{
try {
String ipv4;
ArrayList<NetworkInterface> nilist = Collectionslist(NetworkInterfacegetNetworkInterfaces());
for (NetworkInterface ni: nilist)
{
ArrayList<InetAddress> ialist = Collectionslist(nigetInetAddresses());
for (InetAddress address: ialist)
{
if (!addressisLoopbackAddress() && InetAddressUtilsisIPv4Address(ipv4=addressgetHostAddress()))
{
return ipv4;
}
}
}
} catch (SocketException ex)
{
//Loge(LOG_TAG, extoString());
}
return null;
}
import javanetServerSocket;
import javanetSocket;
public class TcpServer
{
public static void main(String[] args) throws Exception
{
// 创建服务器端的socket对象
ServerSocket ss = new ServerSocket(5000);
// 监听连接
Socket socket = ssaccept();
// 直到连接建立好之后代码才会往下执行
Systemoutprintln("Connected Successfully!");
}
}
import javanetSocket;
public class TcpClient
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("127001", 5000);
}
}
如何用java写一个呼叫中心系统
这个你肯定需要电信的支持或者华为的语音支持或者青牛的支持,一般他们会给你控件调用的
我们现在采用的是B/S系统但是纯BS是不行的我们采用的是把供应商的DLL打包做成ActiveX控件支持的
新建一个窗口,然后实现一个关闭按钮”窗口的功能
以上就是关于Java编程 怎样获得自己在外网的真实ip全部的内容,包括:Java编程 怎样获得自己在外网的真实ip、java如何实现对本机的ip地址 网关地址 子网、java破解ip屏蔽+多线程同步拨号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)