android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)
安卓Socket通信實例
本文摘自:https://whatsblog.icu/index.php/Android/17.html
1、Socket通信必須知道的地方
1、首先,Socket通信采用TCP模式,客戶端需要連接到服務端
2、采用網絡,需要打開Internet權限
3、需要合理調用線程,熟悉線程與輸入輸出流的使用
4、socket服務端和客戶端編碼方式不一致將有可出現中文亂碼問題
5、在收發數據前,必須和對方建立可靠的連接。
一個TCP連接必須要經過三次“對話”才能建立,其中的過程非常復雜,過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什么時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之后,主機A才向主機B正式發送數據。
6、線程:
線程是進程中的一個實體,是被系統獨立調度和分配的基本單位。一個進程可以有多個線程,一個線程必須有一個父進程,線程自己不擁有系統資源,只有運行必須的一些數據結構,但它可以與同屬一個進程的其他線程共享進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以并發執行。
7、文件輸入流與輸出流的講解 :
1、InputStream與OuputStream的區別
:slightly_smiling_face:
不管你從磁盤讀,從網絡讀,或者從鍵盤讀,讀到內存,就是InputStream。
不管你寫到磁盤,寫到網絡,或者寫到屏幕,都是OuputStream。
Socket通信中也是如此
:apple:
2、如何分清InputStream與OuputStream
我們所說的流,都是針對內存說的,比如為什么打印到屏幕上就是System.out.println();而從屏幕等待用戶輸入的卻是System.in呢?因為對于內存來說,把字符串打印到屏幕上是從內存流向屏幕這個顯示器的,也就是輸出,而從屏幕等待用戶輸入呢?就是等待鍵盤將字符輸入到內存中。所以,你根本就不用死記硬背,當你遇到IO的時候,就想兩件事,第一,我的內存是中心,第二看看流的方向(矢量)!那我訪問網絡,看網頁是什么呢 網絡--------------->內存 是 in 因為我們訪問頁面是要抓取該頁面得一個html文件,那我要是在網絡上輸入帳號密碼登陸呢? 是不是內存的東西要寫到該服務器上呢,所以當然是out了!
3、Socket中的Recieve與Send
同樣socket編程用到更多的IO,這里分別用Server(服務器端)和Client(客戶端)來說明
Server: 遇到請求,網絡----->內存 IN 服務器應答, 內存------->網絡 OUT-----------------------------------------------------------------Client: 請求服務, 內存----->網絡 OUT 服務器應答, 網絡------->內存 IN
注:
當服務端需要讀取本地ip時可以使用WifiInfo的getIpAddress()方法,服務端部分已集成,可直接初始化調用
2、思路分析:
1、分清Client和Server:
Client即客戶端,用于與服務端進行交互,在本實例中用于與服務端一對一聊天。Server即服務端,用于啟動服務,供客戶端通過指定方式連接(Socket中使用IP地址和端口號)。Server中可以指定端口號,在Client中需要輸入服務端的IP地址和端口號才可以進行握手。無論在什么地方的Server總是先運行,Client后運行。Client和Server的初始化方式不一樣,出錯將導致無法握手!
2、功能模塊化
不同的功能使用不同的線程,盡量降低各模塊之間的耦合性對于處理類似于控制TextView中的值時,需要專門提供一個線程來處理(Handler的消息機制),避免程序無故報錯導致跑飛在線程中需要操作控件時巧妙使用消息傳遞的中間體:Message,可以完美避免未知錯誤的產生在 Java 中所有數據都是使用流讀寫的。流是一組有序的數據序列,將數據從一個地方帶到另一個地方。根據數據流向的不同,可以分為輸入(Input)流和輸出(Output)流兩種。在流的使用中必須要使用byte數組!為了保證在握手成功之后正確接收到信息需要在握手過程中傳入接收部分功能要懂得在握手斷開后處理好異常而不至于報錯,同時還可以在程序中直接反饋相關信息,這是最主要的
Manifest聯網請求:
舉報/反饋
總結
以上是生活随笔為你收集整理的android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言中int*point 其中poin
- 下一篇: 疾风之刃鸿蒙炸裂,疾风之刃二周年版本12