首先说一下手机与电脑连接方法:
家里有无线网路由器的话,直接将手机介入无线网就可以了,如果只有手机和笔记本的话,可以打开android的wifi热点。设置-无线和网络-绑定与便携式热点,打开便携式热点。然后用笔记本连接。笔记本自动获取ip的话,就可以通过android上网了。
wifi开发实质还是tcp,udp网络编程
1,基于tcp网络编程:
class Client{ public static final int port=8882; private Socket s=null; private String str=null; private DataOutputStream dos=null; private DataInputStream dis=null; private boolean bconn=false; private Thread th; public Client(String ip){ th=new Thread(new Received()); connect(ip); th.start(); } private void send_msg(){ try { dos=new DataOutputStream(s.getOutputStream()); dos.writeUTF(str); dos.flush(); } catch (IOException e) { e.printStackTrace(); } } public void connect(String ip){ try { s=new Socket(ip, port); bconn=true; dis=new DataInputStream(s.getInputStream()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void release_dis(){ try { bconn=false; if(dos!=null){ dos.close(); dos=null; } if(dis!=null){ dis.close(); dis=null; } if(s!=null){ s.close(); s=null; } } catch (IOException e) { e.printStackTrace(); } } private class Received implements Runnable{ @Override public void run() { try { while(bconn){ String msg=dis.readUTF(); Log.e("read msg", msg); } } catch(SocketException e){ Log.e("quit msg", "has quit"); }catch (IOException e) { e.printStackTrace(); } } } }
2,基于udp网络编程:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; public class NetClient { String ip; private int udp_port; private DatagramSocket ds=null; public void connect(String ip,int port){ this.ip=ip; this.udp_port=port; try { ds=new DatagramSocket(udp_port); } catch (SocketException e1) { e1.printStackTrace(); } new Thread(new UDPThread()).start(); } private class UDPThread implements Runnable{ byte[] buf=new byte[1024]; @Override public void run() { while(ds!=null){ DatagramPacket dp=new DatagramPacket(buf, buf.length); try { ds.receive(dp); parse(dp); System.out.println("receive a package from server"); } catch (IOException e) { e.printStackTrace(); } } } private void parse(DatagramPacket dp) { ByteArrayInputStream bais = new ByteArrayInputStream(buf, 0, dp.getLength()); DataInputStream dis = new DataInputStream(bais); String msg=null; try { msg=dis.readUTF(); } catch (IOException e) { e.printStackTrace(); } } } /** * send data package to server * @param ds * @param ip * @param udpPort */ public void sendMsg(String str) { if(ds==null) return; ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); try { dos.write(str.getBytes("UTF-8")); dos.flush(); } catch (IOException e) { e.printStackTrace(); } byte[] buf=baos.toByteArray(); try { DatagramPacket dp=new DatagramPacket(buf, buf.length, new InetSocketAddress(ip, udp_port)); ds.send(dp); } catch (SocketException e) { Log.e("udpmsg", e.getMessage()); } catch (IOException e) { Log.e("udpmsg", e.getMessage()); } }
3,对wify的设置管理:
import java.util.List; import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiManager.WifiLock; public class WifiAdmin { //定义WifiManager对象 private WifiManager mWifiManager; //定义WifiInfo对象 private WifiInfo mWifiInfo; //扫描出的网络连接列表 private List<ScanResult> mWifiList; //网络连接列表 private List<WifiConfiguration> mWifiConfiguration; //定义一个WifiLock WifiLock mWifiLock; //构造器 public WifiAdmin(Context context) { //取得WifiManager对象 mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); //取得WifiInfo对象 mWifiInfo = mWifiManager.getConnectionInfo(); } //打开WIFI public void OpenWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } } //关闭WIFI public void CloseWifi() { if (mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } //锁定WifiLock public void AcquireWifiLock() { mWifiLock.acquire(); } //解锁WifiLock public void ReleaseWifiLock() { //判断时候锁定 if (mWifiLock.isHeld()) { mWifiLock.release(); } } //创建一个WifiLock public void CreatWifiLock() { mWifiLock = mWifiManager.createWifiLock("Test"); } //得到配置好的网络 public List<WifiConfiguration> GetConfiguration() { return mWifiConfiguration; } //指定配置好的网络进行连接 public void ConnectConfiguration(int index) { //索引大于配置好的网络索引返回 if(index > mWifiConfiguration.size()) { return; } //连接配置好的指定ID的网络 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true); } public void StartScan() { mWifiManager.startScan(); //得到扫描结果 mWifiList = mWifiManager.getScanResults(); //得到配置好的网络连接 mWifiConfiguration = mWifiManager.getConfiguredNetworks(); } //得到网络列表 public List<ScanResult> GetWifiList() { return mWifiList; } //查看扫描结果 public StringBuilder LookUpScan() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < mWifiList.size(); i++) { stringBuilder.append("Index_"+new Integer(i + 1).toString() + ":"); //将ScanResult信息转换成一个字符串包 //其中把包括:BSSID、SSID、capabilities、frequency、level stringBuilder.append((mWifiList.get(i)).toString()); stringBuilder.append("\n"); } return stringBuilder; } //得到MAC地址 public String GetMacAddress() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress(); } //得到接入点的BSSID public String GetBSSID() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); } //得到IP地址 public int GetIPAddress() { return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress(); } //得到连接的ID public int GetNetworkId() { return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId(); } //得到WifiInfo的所有信息包 public String GetWifiInfo() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString(); } //添加一个网络并连接 public void AddNetwork(WifiConfiguration wcg) { int wcgID = mWifiManager.addNetwork(wcg); mWifiManager.enableNetwork(wcgID, true); } //断开指定ID的网络 public void DisconnectWifi(int netId) { mWifiManager.disableNetwork(netId); mWifiManager.disconnect(); } }
最后别忘了加权限呀
<!-- 访问权限1、访问联网权限 2、访问连接WIFI的权限 3、改变WIFI的权限 4、改变网络的权限 --> <uses-permission android:name = "android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>