Android手机通过wifi进行数据传输(二)
来源:互联网 发布:医生开处方软件 编辑:程序博客网 时间:2024/06/10 00:19
上文接Android手机通过wifi进行数据传输(一)
本文参照自:
【Android连接Wifi和创建Wifi热点 demo】
以下是源码文件
原文件Constant.java
package edu.cdut.robin;
public class Constant {
public final static String END="end";
public final static String HOST_SPOT_SSID="HotSpotRobin";
public final static String HOST_SPOT_PASS_WORD="123456789";
}
源码文件1
QuickTransferActivity.java文件
package edu.cdut.robin;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;import edu.cdut.robin.hotspot.WifiAdmin;import edu.cdut.robin.hotspot.WifiApAdmin;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.DhcpInfo;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;public class QuickTransferActivity extends Activity implements DisplayMesage, ITransferResult {/** Called when the activity is first created. */TextView content;Button mBtn3, mBtn4;WifiAdmin mWifiAdmin;WifiApAdmin wifiAp;Context context;final static String TAG = "robin";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);content = (TextView) this.findViewById(R.id.content);mBtn3 = (Button) findViewById(R.id.button3);mBtn4 = (Button) findViewById(R.id.button4);mBtn3.setText("点击连接Wifi");mBtn4.setText("点击创建Wifi热点");context = this;mBtn3.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmWifiAdmin = new WifiAdmin(context) {@Overridepublic void myUnregisterReceiver(BroadcastReceiver receiver) {// TODO Auto-generated method stubunregisterReceiver(receiver);}@Overridepublic Intent myRegisterReceiver(BroadcastReceiver receiver, IntentFilter filter) {// TODO Auto-generated method stubregisterReceiver(receiver, filter);return null;}@Overridepublic void onNotifyWifiConnected() {// TODO Auto-generated method stubLog.v(TAG, "have connected success!");Log.v(TAG, "###############################");}@Overridepublic void onNotifyWifiConnectFailed() {// TODO Auto-generated method stubLog.v(TAG, "have connected failed!");Log.v(TAG, "###############################");}};mWifiAdmin.openWifi();mWifiAdmin.addNetwork(mWifiAdmin.createWifiInfo(Constant.HOST_SPOT_SSID, Constant.HOST_SPOT_PASS_WORD,WifiAdmin.TYPE_WPA));}});mBtn4.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubwifiAp = new WifiApAdmin(context);wifiAp.startWifiAp(Constant.HOST_SPOT_SSID, Constant.HOST_SPOT_PASS_WORD);}});}public void onClick(View view) {if (view.getId() == R.id.button1) {WifiManager wifiManage = (WifiManager) getSystemService(Context.WIFI_SERVICE);DhcpInfo info = wifiManage.getDhcpInfo();WifiInfo wifiinfo = wifiManage.getConnectionInfo();String ip = intToIp(wifiinfo.getIpAddress());String serverAddress = intToIp(info.serverAddress);new Sender(serverAddress, this, this).start();Log.w("robin", "ip:" + ip + "serverAddress:" + serverAddress + info);} else if (view.getId() == R.id.button2) {Receiver service = new Receiver(this, this);service.start();}}Handler handler = new Handler();StringBuffer strBuffer = new StringBuffer();public void displayMesage(final String msg) {Runnable r = new Runnable() {public void run() {// TODO Auto-generated method stubif (strBuffer.length() > 1024) {strBuffer.delete(0, 100);}strBuffer.append(msg + "\n");content.setText(strBuffer.toString());content.invalidate();}};handler.post(r);}// 将获取的int转为真正的ip地址,参考的网上的,修改了下private String intToIp(int i) {return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + ((i >> 24) & 0xFF);}@Overridepublic void appendMesage(String msg) {displayMesage(msg);}@Overridepublic void onResult(int result, long size) {if (wifiAp != null) {wifiAp.closeWifiAp(context);}// TODO Auto-generated method stubcloseWifi();Runnable r = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubdisplayMesage("try to open wifi");openWifi();displayMesage("open wifi end");}};handler.postDelayed(r, 30 * 1000);}WifiManager mWifiManager;// 打开WIFIpublic void openWifi() {if(mWifiAdmin!=null){mWifiAdmin.openWifi();return;}if (mWifiManager == null) {mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);}if (!mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(true);}}// 关闭WIFIpublic void closeWifi() {if(mWifiAdmin!=null){mWifiAdmin.closeWifi();return;}if (mWifiManager == null) {mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);}if (mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(false);}}}interface DisplayMesage {void displayMesage(String msg);void appendMesage(String msg);}interface ITransferResult {void onResult(int result, long size);}class Receiver extends Thread {private static BufferedReader in;DisplayMesage console;ITransferResult transferResult;Receiver(DisplayMesage console, ITransferResult transferResult) {super();this.console = console;this.transferResult = transferResult;}public void run() {try {ServerSocket socketService = new ServerSocket(3358);Log.i("robin", "waiting a connection from the client" + socketService);Socket sock = socketService.accept();String hostAddress = sock.getLocalAddress().getHostAddress();String inetAddress = sock.getInetAddress().getHostAddress();Log.w("robin", "local:" + hostAddress + "| inetAddress" + inetAddress + "|" + sock.getRemoteSocketAddress());Log.w("robin", "local name:" + sock.getLocalAddress().getHostName() + "| inetAddress"+ sock.getInetAddress().getHostName() + "|" + InetAddress.getLocalHost().getHostAddress());in = new BufferedReader(new InputStreamReader(sock.getInputStream()));String line;boolean flag = true;long count = 0;long time = System.currentTimeMillis();do {line = in.readLine();if (flag) {console.displayMesage("Recevie:" + line);flag = false;}count = count + line.length();if (count % 1024 == 0) {console.displayMesage("Recevied:" + ((count << 1) >> 10) + "kB data");}} while (!Constant.END.equals(line));Log.w("robin", "you input is :" + line);long t = System.currentTimeMillis() - time;if (t == 0)t = 1;count = count << 1;long rate = ((count / t) * 1000) / 1024;count = count >> 10;console.displayMesage("Recevied:" + count + "kB data" + " in " + t + " ms" + " at rate:" + rate+ " kB/second");Log.i("robin", "exit the app");sock.close();socketService.close();transferResult.onResult(1, count);} catch (Exception e) {e.printStackTrace();}}}class Sender extends Thread {DisplayMesage console;String serverIp;ITransferResult transferResult;Sender(String serverAddress, DisplayMesage console, ITransferResult transferResult) {super();serverIp = serverAddress;this.console = console;this.transferResult = transferResult;}public void run() {Socket sock = null;PrintWriter out;try {// 声明sock,其中参数为服务端的IP地址与自定义端口sock = new Socket(serverIp, 3358);Log.w("robin", "I am try to writer" + sock);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}char data[] = new char[1024 * 10];for (int i = 0; i < data.length; i++) {data[i] = (char) i;}try {if (sock != null) {// 声明输出流out,向服务端输出“Output Message!!”final String msg = "Hello,this is robin!!";Log.w("robin", "try to writer");out = new PrintWriter(sock.getOutputStream(), true);StringBuffer strBuffer = new StringBuffer();strBuffer.append(msg);String str = msg;for (int i = 0; i < 1024; i++) {if (i != 0) {str = msg + System.currentTimeMillis() + "|";out.write(data);}out.println(str);Log.w("robin", str);if (i == 0) {console.displayMesage("send message....");} else if (i % 100 == 0) {console.displayMesage("send message " + i + " success!");}if (strBuffer.length() > 1024) {strBuffer.delete(0, strBuffer.length());}}out.println(Constant.END);out.flush();}transferResult.onResult(1, 1);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if (sock != null) {sock.close();}} catch (Exception ex) {ex.printStackTrace();}}}
下文
3 1
- Android手机通过wifi进行数据传输(二)
- Android手机通过wifi进行数据传输(二)
- 【Android】Android手机通过wifi进行数据传输
- Android手机通过wifi进行数据传输(一)
- Android手机通过wifi进行数据传输(三)
- Android手机通过wifi进行数据传输(四)
- Android手机通过wifi进行数据传输(三)
- Android手机通过wifi进行数据传输(三)
- Android手机通过wifi进行数据传输(一)
- Android手机通过wifi进行数据传输(三)
- Android手机通过wifi进行数据传输(一)
- Android手机通过wifi进行数据传
- 通过WiFi连接Android手机,进行ADB调试
- android手机通过WIFI与硬件进行通信
- Android手机通过Wifi与PC机之间进行通信问题 (有代码)
- Android手机通过Wifi与PC机之间进行通信问题 (有代码)
- anroid 通过wifi连接手机,进行调试
- 通过wifi连接手机进行调试
- 串行 RapidIO
- java如何解析多层json
- Barcode Reader SDK for .NET条码识别控件使用介绍及下载
- hashCode与equals的区别与联系
- 网页-实时倒计时
- Android手机通过wifi进行数据传输(二)
- __FILE__, __FUNCTION__, __LINE__
- PHP自学笔记01----2014年05月08日
- CSS3 data
- 《c++ Primer(第四版)》习题 9.39
- (原创)一个超级对象池的实现
- 春季护嗓必吃三样宝
- 周小平失败了的原因详解
- 娱乐 24点牌