日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)

發(fā)布時(shí)間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android socket通信如何抓取,安卓Socket通信实例(客户端、服务端) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

安卓Socket通信實(shí)例

本文摘自:https://whatsblog.icu/index.php/Android/17.html

1、Socket通信必須知道的地方

1、首先,Socket通信采用TCP模式,客戶端需要連接到服務(wù)端

2、采用網(wǎng)絡(luò),需要打開(kāi)Internet權(quán)限

3、需要合理調(diào)用線程,熟悉線程與輸入輸出流的使用

4、socket服務(wù)端和客戶端編碼方式不一致將有可出現(xiàn)中文亂碼問(wèn)題

5、在收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。

一個(gè)TCP連接必須要經(jīng)過(guò)三次“對(duì)話”才能建立,其中的過(guò)程非常復(fù)雜,過(guò)程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對(duì)話;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)?”,這是第二次對(duì)話;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”,這是第三次對(duì)話。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過(guò)三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。

6、線程:

線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分配的基本單位。一個(gè)進(jìn)程可以有多個(gè)線程,一個(gè)線程必須有一個(gè)父進(jìn)程,線程自己不擁有系統(tǒng)資源,只有運(yùn)行必須的一些數(shù)據(jù)結(jié)構(gòu),但它可以與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。

7、文件輸入流與輸出流的講解 :

1、InputStream與OuputStream的區(qū)別

:slightly_smiling_face:

不管你從磁盤讀,從網(wǎng)絡(luò)讀,或者從鍵盤讀,讀到內(nèi)存,就是InputStream。

不管你寫(xiě)到磁盤,寫(xiě)到網(wǎng)絡(luò),或者寫(xiě)到屏幕,都是OuputStream。

Socket通信中也是如此

:apple:

2、如何分清InputStream與OuputStream

我們所說(shuō)的流,都是針對(duì)內(nèi)存說(shuō)的,比如為什么打印到屏幕上就是System.out.println();而從屏幕等待用戶輸入的卻是System.in呢?因?yàn)閷?duì)于內(nèi)存來(lái)說(shuō),把字符串打印到屏幕上是從內(nèi)存流向屏幕這個(gè)顯示器的,也就是輸出,而從屏幕等待用戶輸入呢?就是等待鍵盤將字符輸入到內(nèi)存中。所以,你根本就不用死記硬背,當(dāng)你遇到IO的時(shí)候,就想兩件事,第一,我的內(nèi)存是中心,第二看看流的方向(矢量)!那我訪問(wèn)網(wǎng)絡(luò),看網(wǎng)頁(yè)是什么呢 網(wǎng)絡(luò)--------------->內(nèi)存 是 in 因?yàn)槲覀冊(cè)L問(wèn)頁(yè)面是要抓取該頁(yè)面得一個(gè)html文件,那我要是在網(wǎng)絡(luò)上輸入帳號(hào)密碼登陸呢? 是不是內(nèi)存的東西要寫(xiě)到該服務(wù)器上呢,所以當(dāng)然是out了!

3、Socket中的Recieve與Send

同樣socket編程用到更多的IO,這里分別用Server(服務(wù)器端)和Client(客戶端)來(lái)說(shuō)明

Server: 遇到請(qǐng)求,網(wǎng)絡(luò)----->內(nèi)存 IN 服務(wù)器應(yīng)答, 內(nèi)存------->網(wǎng)絡(luò) OUT-----------------------------------------------------------------Client: 請(qǐng)求服務(wù), 內(nèi)存----->網(wǎng)絡(luò) OUT 服務(wù)器應(yīng)答, 網(wǎng)絡(luò)------->內(nèi)存 IN

注:

當(dāng)服務(wù)端需要讀取本地ip時(shí)可以使用WifiInfo的getIpAddress()方法,服務(wù)端部分已集成,可直接初始化調(diào)用

2、思路分析:

1、分清Client和Server:

Client即客戶端,用于與服務(wù)端進(jìn)行交互,在本實(shí)例中用于與服務(wù)端一對(duì)一聊天。Server即服務(wù)端,用于啟動(dòng)服務(wù),供客戶端通過(guò)指定方式連接(Socket中使用IP地址和端口號(hào))。Server中可以指定端口號(hào),在Client中需要輸入服務(wù)端的IP地址和端口號(hào)才可以進(jìn)行握手。無(wú)論在什么地方的Server總是先運(yùn)行,Client后運(yùn)行。Client和Server的初始化方式不一樣,出錯(cuò)將導(dǎo)致無(wú)法握手!

2、功能模塊化

不同的功能使用不同的線程,盡量降低各模塊之間的耦合性對(duì)于處理類似于控制TextView中的值時(shí),需要專門提供一個(gè)線程來(lái)處理(Handler的消息機(jī)制),避免程序無(wú)故報(bào)錯(cuò)導(dǎo)致跑飛在線程中需要操作控件時(shí)巧妙使用消息傳遞的中間體:Message,可以完美避免未知錯(cuò)誤的產(chǎn)生在 Java 中所有數(shù)據(jù)都是使用流讀寫(xiě)的。流是一組有序的數(shù)據(jù)序列,將數(shù)據(jù)從一個(gè)地方帶到另一個(gè)地方。根據(jù)數(shù)據(jù)流向的不同,可以分為輸入(Input)流和輸出(Output)流兩種。在流的使用中必須要使用byte數(shù)組!為了保證在握手成功之后正確接收到信息需要在握手過(guò)程中傳入接收部分功能要懂得在握手?jǐn)嚅_(kāi)后處理好異常而不至于報(bào)錯(cuò),同時(shí)還可以在程序中直接反饋相關(guān)信息,這是最主要的

Manifest聯(lián)網(wǎng)請(qǐng)求:

舉報(bào)/反饋

總結(jié)

以上是生活随笔為你收集整理的android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。