首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android开发-手机自动连接计算机

2012-11-23 
Android开发---手机自动连接电脑可能大家开发时会遇到需要连接电脑的情况,如做一个手机控制电脑的程序。当

Android开发---手机自动连接电脑

可能大家开发时会遇到需要连接电脑的情况,如做一个手机控制电脑的程序。当然,毫无疑问用到Socket编程,进行电脑与手机端的通讯。

当然,这可能要你手动输入IP地址,很麻烦。如何让手机能自动搜索出IP连接电脑呢?

思路一:

电脑服务器端:

package com.net;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;/* *应用场景: 一个学校,每当下课时间到了提供提示下课功能。 */public class UdpSend{public void sendData() throws SocketException, UnknownHostException{DatagramSocket ds = new DatagramSocket();// 创建用来发送数据报包的套接字String str = "1";DatagramPacket dp = new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("255.255.255.255"), 3001);// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号try{ds.send(dp);} catch (IOException e){e.printStackTrace();}ds.close();}public static void main(String[] args){Timer timer = new Timer();timer.schedule(new MyTask(), 1000, 1000);}static class MyTask extends java.util.TimerTask{@Overridepublic void run(){UdpSend tt = new UdpSend();Date d = new Date();SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");String strdate = sdf.format(d);String[] classTime = { "17:08:00", "17:19:00", "17:20:00" };for (int i = 0; i < classTime.length; i++){if (classTime[i].equals(strdate)){try{tt.sendData();} catch (SocketException e){e.printStackTrace();} catch (UnknownHostException e){e.printStackTrace();}}}}}}

Android客服端:

package com.net;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UdpRecv{public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(3001);// 创建接收数据报套接字并将其绑定到本地主机上的指定端口byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, 1024);ds.receive(dp);String strRecv = new String(dp.getData(), 0, dp.getLength()) + " from "+ dp.getAddress().getHostAddress() + ":" + dp.getPort();System.out.println(strRecv);ds.close();}}

总结:以上方法用的是java中的UDP广播,让服务器在整个局域网中进行广播。当客户端接受到UDP广播后,得到服务器端的IP地址,然后进行其他操作就方便了。(真机上广播成功,但模拟器上不行)。


思路二:

鉴于局域网IP地址已192.168.X.X,可以直接全部遍历。

package com.net;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;public class NetSearcher{public static void main(String[] args){// TODO code application logic herenew NetSearcher();}public NetSearcher(){long start = System.currentTimeMillis();Socket socket = new Socket();byte[] ip = { (byte) 192, (byte) 168, (byte) 0, (byte) 0 };for (int j = 1; j < 254; j++){ip[2] = (byte) j;for (int i = 1; i < 254; i++){try{ip[3] = (byte) i;socket.connect(new InetSocketAddress(InetAddress.getByAddress(ip),20000), 80);System.out.println("Server's IP 192.168." + j + "." + i);break;} catch (Exception e){System.out.println("Server IP is not 192.168." + j + "."+ i);}}}System.out.println("Time takes " + (System.currentTimeMillis() - start)+ " millis.");}}

总结:第二种方法只提供一种思路,但是可行性有待检验。第一种方法的通用性强,在WIFI上测试成功,但GPRS下无反应。


转载请注明出处:http://blog.csdn.net/xn4545945


热点排行