1. 程式人生 > >Android手機通過wifi進行資料傳輸(二)

Android手機通過wifi進行資料傳輸(二)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                上文接 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" ;     @Override     public 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 () {             @Override             public void onClick ( View v ) {                 // TODO Auto-generated method stub                 mWifiAdmin = new WifiAdmin ( context ) {                     @Override                     public void myUnregisterReceiver ( BroadcastReceiver receiver ) {                         // TODO Auto-generated method stub                         unregisterReceiver(receiver);                     }                     @Override                     public Intent myRegisterReceiver ( BroadcastReceiver receiver , IntentFilter filter ) {                         // TODO Auto-generated method stub                         registerReceiver(receiver, filter);                         return null;                     }                     @Override                     public void onNotifyWifiConnected () {                         // TODO Auto-generated method stub                         Log.v(TAG, "have connected success!");                         Log.v(TAG, "###############################");                     }                     @Override                     public void onNotifyWifiConnectFailed () {                         // TODO Auto-generated method stub                         Log.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 () {             @Override             public void onClick ( View v ) {                 // TODO Auto-generated method stub                 wifiAp = 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 stub                 if (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 );     }     @Override     public void appendMesage ( String msg ) {         displayMesage ( msg );     }     @Override     public void onResult ( int result , long size ) {         if ( wifiAp != null ) {             wifiAp . closeWifiAp ( context );         }         // TODO Auto-generated method stub         closeWifi();         Runnable r = new Runnable() {             @Override             public void run () {                 // TODO Auto-generated method stub                 displayMesage("try to open wifi");                 openWifi();                 displayMesage("open wifi end");             }         };         handler . postDelayed ( r , 30 * 1000 );     }     WifiManager mWifiManager ; // 開啟WIFI     public void openWifi() {         if(mWifiAdmin!=null){             mWifiAdmin.openWifi();             return;         }         if (mWifiManager == null) {             mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);         }         if (!mWifiManager.isWifiEnabled()) {             mWifiManager.setWifiEnabled(true);         }     } // 關閉WIFI     public 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