Android 工作手記

Mac vim命令行操作

  MAC 終端編輯完成后如何保存 如果是vi顺又,則:Esc 退出編輯模式漠趁,輸入以下命令: 
  :wq 保存后退出vi
  :wq! 則為強制儲存后退出(常用) 
  :w 保存但不退出(常用) 
  :w! 若文件屬性為『只讀』時逢唤,強制寫入該檔案 
  :q 離開 vi (常用) 
  :q! 若曾修改過檔案市怎,又不想儲存闸溃,使用 ! 為強制離開不儲存檔案。
  :e! 將檔案還原到最原始的狀態(tài)谆棱!

  配置環(huán)境變量:vim ~/.zshrc 按照里面模板去配置 source ~/.zshrc 保存

flutter配置時報錯(flutter not find)

1,open ~/.bash_profile
    export PUB_HOSTED_URL=https://pub.flutter-io.cn
    export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
    export PATH=/Users/mac/flutter/bin:$PATH
2.open ~/.zshrc 如果文件夾不存在 用vim命令創(chuàng)建文件夾并且和.bash_profile
中內(nèi)容保持一致保存退出后阶祭,再終端輸入:source .bash_profile 更新配置

android工作中碰到的些許問題

1, Android studio 編譯問題:finished with non-zero exit value 2
  問題:Error:Execution failed for task
  ':androidShopNC2014Moblie:transformClassesWithDexForDebug'.>
  com.android.build.api.transform.TransformException:
  com.android.ide.common.process.ProcessException:
  java.util.concurrent.ExecutionException:
  com.android.ide.common.process.ProcessException:
  org.gradle.process.internal.ExecException:
  Process 'command
  '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java''
  finished with non-zero exit value 2

  答案:android {
  defaultConfig {
  multiDexEnabled true
  }
  }
 2>.Android studio 編譯問題:finished with non-zero exit value 1(由于導入的依賴出現(xiàn)重復造成的)
 問題:Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
 
  >
  com.[Android](http://lib.csdn.net/base/15).build.api.transform.TransformException:
  com.android.ide.common.process.ProcessException:
  org.gradle.process.internal.ExecException: Process 'command 'F:\Program Files
  (x86)\[Java](http://lib.csdn.net/base/17)\jdk1.8.0_31\bin\java.exe'' finished
  with non-zero exit value 1
 
  解決方案:這個是因為依賴包重復了
  (像v4和nineoldandroids),app中實現(xiàn)了對easeUI的依賴勒奇,但是app和easeUI都添加了對這個包的依賴。
  所以就報這個錯誤巧骚,修改之后再報赊颠,就clean,rebuild一下劈彪。
3>.Android studio 編譯問題:finished with non-zero exit value
  1(由于buildtools版本太高造成的)
 
  Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
  > com.android.ide.common.process.ProcessException:
  org.gradle.process.internal.ExecException:
  Process 'command
 '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java''
  finished with non-zero exit value 1
 
  錯誤原因: buildToolsVersion版本太高竣蹦,我原來的 buildToolsVersion "24.0.0”
 需要jdk1.8,而我的是jdk1.7沧奴,所以一直報這個錯痘括,剛開始以為是v4包和V7包沖突,
 因為之前遇到這樣的問題滔吠,而這次刪除V4包之后依然報這個錯纲菌,上stackoverflow搜了一下,
 把buildTools版本降下來就好了疮绷。
4,執(zhí)行 bash: ./gradlew: Permission denied
解決方案: chmod +x gradlew
執(zhí)行./gradlew build --scan 命令查看編譯問題 詳細報錯信息
5.Manifest merger failed with multiple errors, see logs
 解決方案:./gradlew processDebugManifest --stacktrace
 
 查看編譯錯誤: ./gradlew clean assembleDebug --stacktrace


  • 連接mumu模擬器: adb connect 127.0.0.1:5555

  • 依賴樹 android studio查看第三方依賴樹

  • mac打開環(huán)境變量配置: open -e .bash_profile 刷新環(huán)境變量配置: source .bash_profile

  • 生成ssh 如果本地有id_rsa.pub 先刪除本地文件 之后命令行執(zhí)行 ssh-keygen -t rsa -C
    "jiyajie@aspirecn.com",一直確定即可

  • Webview優(yōu)化: 創(chuàng)建一個全局的webView 將web單獨一個進程,用aidl進行通信

  • Activity 的 isDestroy 在被Activity調(diào)用之前就已經(jīng)賦值
    所以只要是在onDestroy中處理的過程中isDestroy()返回一直未true

  • 獲取應(yīng)用簽名信息
    JKS 密鑰庫使用專用格式翰舌。
    建議使用
    2(.keystore文件), keytool -list -v -alias migu -keystore
    /Users/jiyajie/mgsv4pad_new/mgsv4pad_playvideo/mgsv4pad/app/padkey.jks

  • Dart 語法筑基

  • charles 抓包工具配置和使用文檔


brew 安裝scrcpy

Mac安裝scrcpy:

1,brew install scrcpy

2,安裝過程比較緩慢 如果出現(xiàn)某一個包安裝失敗
使用 brew install (具體的包名即可 不要帶提示的版本號,否則依然找不到下載路徑)
這個過程非常漫長 如果有提示就一直brew install,終有一次會成功的
這個過程我斷斷續(xù)續(xù)用了五六天時間來完成


git基本操作

git 拉取代碼:
 
 執(zhí)行: git fetch upstream
 
 把上游的遠程代碼合并到本地的 master分支
 
 git checkout master
 
 git merge upstream/master
 
 git commit –amend git  commit --amend
 相當于上次提交錯誤的信息被覆蓋了,gitk圖形化界面上看不到上次提交的信息冬骚,
 git log上也看不到之前的信息椅贱,而add 后再commit
 相當于重新加了一個信息。相當于打了個補丁
 
 如果你想保留剛才本地修改的代碼只冻,
 并把git服務(wù)器上的代碼pull到本地(本地剛才修改的代碼將會被暫時封存起來)
  git stash
  git pull origin master
  git fetch upstream
  git merge upstream/master
  git stash pop
 
 Git遠程放棄修改之后,本地恢復到某一個節(jié)點
 git reset --soft a287041c0fd791412ff6351c705b036f04237a6e
 git push origin master --force

部分adb命令操作

 12.adb 開啟應(yīng)用 adb shell am start -n cn.cmvideo.car.play/.SplashActivity(包名)
 adb shell getprop dalvik.vm.heapgrowthlimit
 單個應(yīng)用可用最大內(nèi)存主要對應(yīng)的是這個值,它表示單個進程內(nèi)存被限定在64m,
 即程序運行過程中實際只能使用64m內(nèi)存庇麦,超出就會報OOM。(僅僅針對dalvik堆喜德,不包括native堆)
 dalvik.vm.heapstartsize 表示分配的初始堆大小
 dalvik.vm.heapsize
 heapsize參數(shù)表示單個進程可用的最大內(nèi)存山橄,但如果存在heapgrowthlimit參數(shù),
 則以heapgrowthlimit為準.heapsize表示不受控情況下的極限堆住诸,
 表示單個虛擬機或單個進程可用的最大內(nèi)存驾胆。而android上的應(yīng)用是帶有獨立虛擬機的,
 也就是每開一個應(yīng)用就會打開一個獨立的虛擬機
 這樣設(shè)計就會在單個程序崩潰的情況下不會導致整個系統(tǒng)的崩潰)贱呐。
 adb shell getprop ro.build.version.release 查看系統(tǒng)版本號
 
 adb logcat >/Users/jiyajie/Desktop/log.txt adb導出運行時log日志
 
 adb shell am start -n com.android.settings/com.android.settings.Settings adb打開應(yīng)用設(shè)置
 
 adb kill-server 殺死adb進程
 
 adb shell getprop ro.product.cpu.abi 查看手機cpu架構(gòu)信息
 
 adb shell cat /proc/cpuinfo 獲取cpu架構(gòu)信息
 
 adb shell top 查看當前硬件下 cpu的實時占用情況
 
 adb shell am start -n com.android.settings/com.android.settings.HWSettings
 
 adb shell wm size 獲取屏幕寬高信息
 
 adb shell pm clear com.xx.xx:清除對應(yīng)包的數(shù)據(jù)和緩存

 鴻蒙設(shè)備: 進入setting adb shell am start -n com.android.settings/.HWSettings
 更改日期: adb shell 進去:   date 0825113620(11:36 8月25號20年)(按這個格式設(shè)置為當前時間)
 
 拷貝密碼丧诺,鼠標放到【連接】按鈕上,粘貼密碼后奄薇,屏幕會變黑驳阎,直接在黑屏幕上點擊連接

性能優(yōu)化相關(guān)

卡頓優(yōu)化方面:
 1.webView優(yōu)化: 創(chuàng)建一個全局的webView 將web單獨一個進程,用aidl進行通信
啟動優(yōu)化:
 1.adb命令獲取啟動時間 adb shell am start -W 包名.SplashActivity
 ThisTime: 代表最后一個Activity啟動時間
 TotalTime: 代表所有Activity的啟動時間
 WaitTime: 所有時間: ams啟動activity總耗時
 
 2.方法耗時統(tǒng)計: 在Application的onCreat方法下加入Debug.startMethodTracing("TracePath")
 
 總結(jié): 主要分為兩個方面: 1.業(yè)務(wù)流程優(yōu)化(視覺欺騙)
 2. 代碼優(yōu)化(減少加載時間) ui優(yōu)化 內(nèi)存優(yōu)化 圖片優(yōu)化/緩存優(yōu)化 代碼量優(yōu)化

進程間通信相關(guān)內(nèi)容

 進程間通信:
 Binder通信的弊端: 1.aidl語法難寫,容易發(fā)生編譯異常 
 2.只支持基本類型,不支持對象類型
 3.當應(yīng)用需要多個進程互相通信時需要多個aidl
 4.調(diào)用復雜容易出現(xiàn)異常,進程的調(diào)用者無法統(tǒng)一管理

android 基礎(chǔ)知識點范圍

java 相關(guān)知識點:

 Java 基礎(chǔ)語法,Java 基本數(shù)據(jù)類型,Java 變量類型,Java 運算符,for,while,
 do...while,Java 條件語句,Java switch case,Java基礎(chǔ)
 Java 對象和類,Java 字符串,Java 修飾符,Java Character 類,Java String 類,
 Java 數(shù)組
 Java Number & Math 類,StringBuffer 類,StringBuilder 類,Java 日期時間,
 Java 方法,輸入、輸出流與文件,
 Java Scanner 類,Java 異常處理,面向?qū)ο?線程,Java 繼承,Java 重寫(Override)
 與重載(Overload),Java 多態(tài),
 Java 抽象類,Java 封裝,Java 接口,Java 枚舉(enum),Java 包(package),
 流程控制,Java 文檔注釋,Java 內(nèi)部類

android 基礎(chǔ)知識點:

活動,模擬器,布局組件,通用UI組件,消息通知組件,對話框組件,文件存儲,共享存儲,
SQLite,Tween動畫,Drawable動畫,
 Property動畫,Fast-json,Java語言,SwitchView,SugarORM,Android Studio,
 抽屜,活動發(fā)布,活動方向變化,
 拖放,事件隊列和回調(diào),退出活動,姿勢,用戶輸入,用戶交互,鍵盤輸入
 
 SQLite 簡介,命令,語法
 函數(shù),運算符,注釋符,通配符,數(shù)據(jù)類型
 信息安全: 實體安全,系統(tǒng)安全,網(wǎng)絡(luò)安全

 Android 像素密度相關(guān)知識點dpi(dot per inch,每英寸點數(shù)):
     ldpi: 適用于低密度屏幕(120dpi) 的資源
     mdpi: 適用于中密度屏幕(160dpi) 的資源(這是基準密度)
     hdpi: 適用于高密度屏幕(240dpi) 的資源
     xhdpi: 適用于加高密度屏幕(320dpi) 的資源
     xxhdpi: 適用于超超搞密度屏幕(480dpi) 的資源
     xxxhdpi: 適用于超超超高密度屏幕(640dpi) 的資源
     nodpi: 適用于所有密度資源,這些是和密度無關(guān)的資源,不論當前dpi是多少,
     系統(tǒng)都不會縮放當前限定下的資源

     ldpi-->xxxhdpi 之間的縮放比: 3:4:6:8:12:16

     Android 中查找最佳匹配資源的規(guī)則:
     一般來說,Android會「更傾向于縮小較大的原始圖像呵晚,而非放大較小的原始圖像」蜘腌。
     在此前提下:

    ? 假設(shè)最接近設(shè)備屏幕密度的目錄選項為xhdpi,如果圖片資源存在饵隙,則匹配成功撮珠;

    ? 如果不存在,系統(tǒng)就會從更高密度的資源目錄下查找金矛,依次為xxhdpi芯急、xxxhdpi;

    ? 如果還不存在驶俊,系統(tǒng)就會從「像素密度無關(guān)的資源目錄nodpi」下查找娶耍;

    ? 如果還不存在,系統(tǒng)就會向更低密度的資源目錄下查找饼酿,依次為hdpi榕酒、mdpi、ldpi故俐。

kotlin 基礎(chǔ)知識點:

 包聲明想鹰、導入,注釋,常量與變量定義,位操作符,字符,布爾,數(shù)組,IF表達式,When表達式,
 For循環(huán),while與do...while循環(huán),返回和跳轉(zhuǎn)
 函數(shù)定義,常量與變量定義,字符串模板,NULL檢查機制,類型檢測及自動類型轉(zhuǎn)換,區(qū)間,比較,類型轉(zhuǎn)換,字符串
 字符串模板,類定義,類屬性,主構(gòu)造器,次構(gòu)造函數(shù),抽象類,內(nèi)部類,匿名內(nèi)部類,類修飾符,枚舉常量
 協(xié)程,高階函數(shù)等
 
  Kotlin中data class
  data class算是Kotlin中一大閃光點了
 
  data class就是一個類中只包含一些數(shù)據(jù)字段,類似于vo,pojo,java bean购披。
  一般而言杖挣,我們在Java中定義了這個數(shù)據(jù)類之后要重寫一下toString,equals等方法刚陡。
  要生成get,set方法惩妇。
 
  然而在Kotlin中這些都不在需要自己手動去敲了,編譯器在背后默默給我們生成了如下的東西:
 
  equals()/hashCode()
  toString()方法
 componentN()方法
 copy()方法
 如何申明一個簡單的數(shù)據(jù)類筐乳? 有一下幾點要求:
 
  主構(gòu)造函數(shù)必須要至少有一個參數(shù)
  主構(gòu)造函數(shù)中的所有參數(shù)必須被標記為val或者var
  數(shù)據(jù)類不能有以下修飾符:abstract歌殃,inner,open,sealed
 data class只能實現(xiàn)接口(Kotlin1.1以前的規(guī)則),現(xiàn)在也可以繼承其它類
 
data class User(var id: Int, var name: String)
 
 使用方式
 fun main(args: Array<String>) {
     var user: User = User(123,"liuliqianxiao")
     var user2: User = User(123,"liuliqianxiao")
     println(user.hashCode())
     println(user2.hashCode())
     println(user.equals(user2))// true
 
     println(user.toString())// User(id=123, name=liuliqianxiao)
 }

 kotlin for循環(huán)的集中方式:

 1,在Kotlin中想遍歷1-100的數(shù)值可以這樣寫:
 for (index in 1..100){
            print(index)
        }

  2,這樣寫是正序遍歷蝙云,如果想倒序遍歷就該使用標準庫中定義的downTo()函數(shù):
  for (index in 100 downTo 1){
            print(index)
        }
  
  3,想不使用1作為遍歷的步長氓皱,可以使用step()函數(shù):
   for (index in 1..100 step 2){
            print(index)//會輸出1..3..5......
        }
  
  4,要創(chuàng)建一個不包含末尾元素的區(qū)間:
  for (index in 1 until 10){
            println(index)//輸出0..9
        }
  
  5,遍歷一個數(shù)組/列表,想同時取出下標和元素:
   val array = arrayOf("a", "b", "c")
        for ((index,e) in array.withIndex()){
            println("下標=$index----元素=$e")
        }

  6,遍歷一個數(shù)組/列表勃刨,只取出下標:
  val array = arrayOf("a", "b", "c")
        for (index in array.indices){
            println("index=$index")//輸出0波材,1,2
        }

  7, 遍歷取元素
  val array = arrayOf("a", "b", "c")
        for (element in array){
            println("element=$element")//輸出a,b,c
        }


android 組件化開發(fā):

### android 組件化開發(fā):
組件化主要從三個方面進行拆分

 1. Gradle

 Gradle 內(nèi)主要設(shè)置開關(guān)
 在Module(app)中身隐,開關(guān)的目的是判斷Module是否以library的方式在程序中運行
  在Module(module)中廷区,來判斷Module是library還是Application,從這兩種方式中為Module設(shè)置不同的清單文件(兩種方式的清單文件不同)
 
 2. 代碼

 代碼中組件化又籠統(tǒng)的分為三部分
 
    2.1 第一部分為library部分贾铝,組件化的App部分與Module不能直接交流隙轻,這時就需要一個library作為中間商埠帕,library可以被App和Module共同引入,
    所以通過library作為中間商最合適不過玖绿。 也可以將library理解為 MVP 模式中的 P層敛瓷。
 
   2.2 第二部分則為Module部分,該部分根據(jù)開關(guān)斑匪,既可以作為library依賴于App部分運行呐籽,也可以作為一個單獨的App運行(
   換句話說:當Module為library時,必須依賴于App部分才能運行秤标,此時可以與App進行數(shù)據(jù)交互等操作绝淡。當Module作為Application時,
   Module就相當于一個獨立的個體苍姜,與App部分不能進行數(shù)據(jù)交互,但是可以與其他依賴進行交互)

   2.3 第三部分為App部分悬包,也是主程序部分衙猪,該部分位于程序的主界面,Module部分則作為主界面的組成成分布近。
 
 3 . 清單文件

 此部分主要分為兩個模塊

   3.1 當該模塊作為Application時垫释,為該模塊設(shè)置一個自定義的Application,主要用于初始化操作

   3.2 為Module作為library和Application分別設(shè)置不同的清單文件

 必須要關(guān)注的幾個部分
 1,application
   在common組件中有BaseAppliaction撑瞧,提供全局唯一的context棵譬,上層業(yè)務(wù)組件在組件化模式下,均需繼承于BaseAppliaction预伺。
 
 2,applicationId管理
   可為不同組件設(shè)置不同的applicationId订咸,也可缺省,在Android Studio中酬诀,默認的applicationId與包名一致脏嚷。
   組件的applicationId在其build.gradle文件的defaultConfig中進行配置:
 
    if (Boolean.valueOf(rootProject.ext.isModule_North)) {
      //組件模式下設(shè)置applicationId
      applicationId "com.hailong.amd.north"
  }
 
  3,manifest管理
  組件在集成模式和組件化模式下,需要配置不同的manifest文件瞒御,因為在組件化模式下父叙,程序入口Activity和自定義的Application是不可或缺的。
  在組件的build.gradle文件的android中進行manifest的管理:


     java插件引入了一個概念叫做SourceSets肴裙,通過修改SourceSets中的屬性趾唱,
     可以指定哪些源文件(或文件夾下的源文件)要被編譯,
     哪些源文件要被排除蜻懦。
 
    sourceSets {
          main {
              if (Boolean.valueOf(rootProject.ext.isModule_North)) {//apk
                  manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
              } else {
                  manifest.srcFile 'src/main/AndroidManifest.xml'
                  java {
                     //library模式下甜癞,排除java/debug文件夾下的所有文件
                     exclude '*module'
                 }
             }
         }
     }

 4,資源名沖突問題


  * 限定所有子類xml中的資源文件的前綴
  * 注意:圖片資源,限定失效阻肩,需要手動添加前綴

   資源名沖突問題带欢,相信大家多多少少都遇到過运授,以前最常見的就是第三方SDK導致的資源名沖突了。
   這個問題沒有特別好的解決辦法乔煞,只能通過設(shè)置資源名前綴 resourcePrefix 以及約束自己開發(fā)習慣進行解決吁朦。
   資源名前綴 resourcePrefix ,是在project的build.gradle中進行設(shè)置的:

   //限定所有子類xml中的資源文件的前綴
   //注意:圖片資源渡贾,限定失效逗宜,需要手動添加前綴
   subprojects {
     afterEvaluate {
         android {
             resourcePrefix "${project.name}_"
         }
     }
  }

 這樣設(shè)置完之后,string空骚、style纺讲、color、dimens等中資源名囤屹,必須以設(shè)置的字符串為前綴熬甚,
 而layout、drawable文件夾下的shape他們的xml文件的命名肋坚,必須以設(shè)置的字符串為前綴蕴忆,否則會報錯提示潮秘。

 另外,資源前綴的設(shè)置對圖片的命名無法限定,建議大家約束自己的開發(fā)習慣澜倦,自覺加上前綴碟渺。

 建議:
 將color透典、shape刽宪、style這些放在基礎(chǔ)庫組件中去,這些資源不會太多诚卸,且復用性極高葵第,所有業(yè)務(wù)組件又都會依賴基礎(chǔ)庫組件。

 5,組件間跳轉(zhuǎn)
 業(yè)務(wù)組件間不存在依賴關(guān)系惨险,不可以通過Intent進行顯式跳轉(zhuǎn)羹幸,是要借助于路由的,例如開源框架ARouter

 我在案例中只使用了ARouter的基礎(chǔ)的頁面跳轉(zhuǎn)功能辫愉,更復雜的諸如攜帶參數(shù)跳轉(zhuǎn)栅受、聲明攔截器等
 功能的使用方法,大家可到Github上查看其使用文檔恭朗。

 在每一個需要用到ARouter的組件的build.gradle文件中對其進行配置:

 android {
    ...
        defaultConfig {
          ...
         //Arouter路由配置
          javaCompileOptions {
             annotationProcessorOptions {
                 arguments = [AROUTER_MODULE_NAME: project.getName()]
                includeCompileClasspath = true
             }
          }
      }
  }
    dependencies{
       ...
        //Arouter路由
        annotationProcessor rootProject.ext.dependencies["arouter_compiler"]
   }
 
    跳轉(zhuǎn)目標頁面配置:
   @Route(path = "/main/MainActivity")
   public class MainActivity extends BaseActivity {
    ……
   }
   跳轉(zhuǎn)發(fā)起頁面的發(fā)起調(diào)用:

    ARouter.getInstance()
           .build("/main/MainActivity")
           .navigation();

  6.第三方sdk集成問題
  項目不可避免的要使用第三方sdk屏镊,如友盟分享、高德地圖痰腮、騰訊 bugly 等而芥,
  都需要在相應(yīng)第三方的開發(fā)者中心使用包名、applicationId注冊膀值,
  獲取相應(yīng)的 appkey 棍丐、appsecret等误辑。那么,在組件化開發(fā)中歌逢,
  到底應(yīng)該使用哪個組件的包名巾钉、applicationId 到第三方平臺進行注冊呢?

 我的想法是使用基礎(chǔ)庫的包名秘案、applicationId 進行注冊砰苍,
 然后將相應(yīng)的第三方sdk的功能封裝為功能組件,供上層業(yè)務(wù)組件進行調(diào)用阱高。

 但也存在一個問題赚导,即在第三方的管理平臺上,將無法區(qū)分相應(yīng)統(tǒng)計信息到底屬于
 哪一個組件化app赤惊。

 所以還是要根據(jù)業(yè)務(wù)要求吼旧、統(tǒng)計要求自己選擇了。


IP協(xié)議淺析

IP 協(xié)議淺析:
物理層: 集線器(網(wǎng)線集合)

數(shù)據(jù)鏈路層: 交換機(發(fā)送數(shù)據(jù)包的數(shù)據(jù)鏈路層需要知道 MAC 地址)

網(wǎng)絡(luò)層:路由器


網(wǎng)絡(luò)層不具有數(shù)據(jù)傳輸功能,數(shù)據(jù)傳輸在交換機

如果兩個ip在同一個子網(wǎng)下(通過子網(wǎng)掩碼(255.255.255.0)判斷ip地址是否在同一個子網(wǎng)下)則不通過路由器(網(wǎng)絡(luò)層傳輸),

如果不在同一個子網(wǎng)下則通過交換機把ip地址相關(guān)信息交給路由器,然后再找到對應(yīng)的ip地址的交換機
在交換機層(網(wǎng)絡(luò)層)未舟,我需要把 IP 地址對應(yīng)的 MAC 地址找到黍少,
也就是通過某種方式,找到 192.168.0.2 對應(yīng)的 MAC 地址 BBBB处面。
這種方式就是 arp 協(xié)議,然后再完成完整的數(shù)據(jù)傳輸

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菩掏,隨后出現(xiàn)的幾起案子魂角,更是在濱河造成了極大的恐慌,老刑警劉巖智绸,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件野揪,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞧栗,警方通過查閱死者的電腦和手機斯稳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹恐,“玉大人挣惰,你說我怎么就攤上這事∨贡撸” “怎么了憎茂?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锤岸。 經(jīng)常有香客問我竖幔,道長,這世上最難降的妖魔是什么是偷? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任拳氢,我火速辦了婚禮募逞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馋评。我一直安慰自己放接,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布栗恩。 她就那樣靜靜地躺著透乾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磕秤。 梳的紋絲不亂的頭發(fā)上乳乌,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音市咆,去河邊找鬼汉操。 笑死,一個胖子當著我的面吹牛蒙兰,可吹牛的內(nèi)容都是我干的磷瘤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搜变,長吁一口氣:“原來是場噩夢啊……” “哼采缚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挠他,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扳抽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后殖侵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸呢,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年拢军,在試婚紗的時候發(fā)現(xiàn)自己被綠了楞陷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡茉唉,死狀恐怖固蛾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赌渣,我是刑警寧澤魏铅,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站坚芜,受9級特大地震影響览芳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸿竖,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一沧竟、第九天 我趴在偏房一處隱蔽的房頂上張望铸敏。 院中可真熱鬧,春花似錦悟泵、人聲如沸杈笔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒙具。三九已至,卻和暖如春朽肥,著一層夾襖步出監(jiān)牢的瞬間禁筏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工衡招, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篱昔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓始腾,卻偏偏與公主長得像州刽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浪箭,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容