基于 Android的 Socket通信

一、 Socket通信的介紹

? ? Android與服務(wù)器通信有兩種方式:Http 或 Socket调榄。

? ? Http:請(qǐng)求-響應(yīng)方式恃慧,即在請(qǐng)求時(shí)建立連接通道,當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求后添瓷,服務(wù)端才能向客戶端返回?cái)?shù)據(jù)梅屉。

? ? Socket:在雙方建立起連接后就可以直接進(jìn)行數(shù)據(jù)的傳輸,在連接時(shí)可實(shí)現(xiàn)信息的主動(dòng)推送鳞贷,而不需要每次由客戶端向服務(wù)器發(fā)送請(qǐng)求坯汤。

?1)什么是 Socket?? ?

????Socket提供了程序內(nèi)部與外界通訊的端口并為通信雙方提供了數(shù)據(jù)傳輸通道搀愧。

? ?2)Socket的分類惰聂?

? ? 不同協(xié)議中的 Socket是不同的,這里只討論 TCP/IP咱筛,在這協(xié)議中搓幌,Socket類型為 流套接字(streamsocket)和數(shù)據(jù)報(bào)套接字(datagramsocket)。

????Streamsocket將 TCP作為其端對(duì)端協(xié)議迅箩,提供了一個(gè)可信賴的字節(jié)流服務(wù)溉愁。

? ??Datagramsocket使用UDP協(xié)議,提供數(shù)據(jù)打包發(fā)送服務(wù)饲趋。

二拐揭、Socket基本通信類型


三、Socket基本實(shí)現(xiàn)原理

? ? 1)基于 TCP協(xié)議的 Socket

????服務(wù)器端首先聲明一個(gè)ServerSocket對(duì)象并且指定端口號(hào)奕塑,然后調(diào)用Serversocket的accept()方法接收客戶端的數(shù)據(jù)堂污。accept()方法在沒有數(shù)據(jù)進(jìn)行接收的處于堵塞狀態(tài)。(Socketsocket=serversocket.accept()),一旦接收到數(shù)據(jù)爵川,通過inputstream讀取接收的數(shù)據(jù)敷鸦。

? ??客戶端創(chuàng)建一個(gè)Socket對(duì)象,指定服務(wù)器端的ip地址和端口號(hào)(Socketsocket=newSocket("172.168.10.108",8080);),通過inputstream讀取數(shù)據(jù)寝贡,獲取服務(wù)器發(fā)出的數(shù)據(jù)(OutputStreamoutputstream=socket.getOutputStream())扒披,最后將要發(fā)送的數(shù)據(jù)寫入到outputstream即可進(jìn)行TCP協(xié)議的socket數(shù)據(jù)傳輸。

? ? 2)基于 UDP協(xié)議的數(shù)據(jù)傳輸

? ??服務(wù)器端首先創(chuàng)建一個(gè)DatagramSocket對(duì)象圃泡,并且指點(diǎn)監(jiān)聽的端口碟案。接下來(lái)創(chuàng)建一個(gè)空的DatagramSocket對(duì)象用于接收數(shù)據(jù)(bytedata[]=newbyte[1024;]DatagramSocketpacket=newDatagramSocket(data,data.length)),使用DatagramSocket的receive方法接收客戶端發(fā)送的數(shù)據(jù)颇蜡,receive()與serversocket的accepet()類似价说,在沒有數(shù)據(jù)進(jìn)行接收的處于堵塞狀態(tài)辆亏。

? ??客戶端也創(chuàng)建個(gè)DatagramSocket對(duì)象,并且指點(diǎn)監(jiān)聽的端口鳖目。接下來(lái)創(chuàng)建一個(gè)InetAddress對(duì)象扮叨,這個(gè)對(duì)象類似與一個(gè)網(wǎng)絡(luò)的發(fā)送地址(InetAddressserveraddress=InetAddress.getByName("172.168.1.120")).定義要發(fā)送的一個(gè)字符串,創(chuàng)建一個(gè)DatagramPacket對(duì)象领迈,并制定要講這個(gè)數(shù)據(jù)報(bào)包發(fā)送到網(wǎng)絡(luò)的那個(gè)地址以及端口號(hào)彻磁,最后使用DatagramSocket的對(duì)象的send()發(fā)送數(shù)據(jù)。*(Stringstr="hello";bytedata[]=str.getByte();DatagramPacketpacket=new DatagramPacket(data,data.length,serveraddress,4567);socket.send(packet);)

? ? 四狸捅、Android實(shí)現(xiàn) Socket簡(jiǎn)單通信

? ? 1)添加權(quán)限

? ? 2)使用 TCP協(xié)議通信

Android端實(shí)現(xiàn):

服務(wù)器端實(shí)現(xiàn):

? ??

? ? 3)使用 UDP協(xié)議通信

客戶端發(fā)送數(shù)據(jù)實(shí)現(xiàn):

客戶端接收服務(wù)器返回的數(shù)據(jù):

服務(wù)器接收客戶端實(shí)現(xiàn):

五衷蜓、總結(jié):

????使用UDP方式android端和服務(wù)器端接收可以看出,其實(shí)android端和服務(wù)器端的發(fā)送和接收大庭相徑尘喝,只要端口號(hào)正確了磁浇,相互通信就沒有問題,TCP使用的是流的方式發(fā)送朽褪,UDP是以包的形式發(fā)送置吓。

參考資料:


基于android的Socket通信

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞍匾,隨后出現(xiàn)的幾起案子交洗,更是在濱河造成了極大的恐慌,老刑警劉巖橡淑,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构拳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梁棠,警方通過查閱死者的電腦和手機(jī)置森,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)符糊,“玉大人凫海,你說我怎么就攤上這事∧新Γ” “怎么了行贪?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)模闲。 經(jīng)常有香客問我建瘫,道長(zhǎng),這世上最難降的妖魔是什么尸折? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任啰脚,我火速辦了婚禮,結(jié)果婚禮上实夹,老公的妹妹穿的比我還像新娘橄浓。我一直安慰自己粒梦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布荸实。 她就那樣靜靜地躺著匀们,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泪勒。 梳的紋絲不亂的頭發(fā)上昼蛀,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天宴猾,我揣著相機(jī)與錄音圆存,去河邊找鬼。 笑死仇哆,一個(gè)胖子當(dāng)著我的面吹牛沦辙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讹剔,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼油讯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了延欠?” 一聲冷哼從身側(cè)響起陌兑,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎由捎,沒想到半個(gè)月后兔综,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狞玛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年软驰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片心肪。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锭亏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硬鞍,到底是詐尸還是另有隱情慧瘤,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布固该,位于F島的核電站锅减,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹬音。R本人自食惡果不足惜上煤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望著淆。 院中可真熱鬧劫狠,春花似錦拴疤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至懦砂,卻和暖如春蜒犯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荞膘。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工罚随, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羽资。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓淘菩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親屠升。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潮改,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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

  • 一、Socket通信簡(jiǎn)介 Android與服務(wù)器的通信方式主要有兩種腹暖,一是Http通信汇在,一是Socket通信。兩者...
    腦袋君閱讀 3,540評(píng)論 5 46
  • 網(wǎng)絡(luò)編程 一.楔子 你現(xiàn)在已經(jīng)學(xué)會(huì)了寫python代碼,假如你寫了兩個(gè)python文件a.py和b.py以蕴,分別去運(yùn)...
    go以恒閱讀 2,016評(píng)論 0 6
  • 什么是Socket Socket是進(jìn)程通訊的一種方式糙麦,即調(diào)用這個(gè)網(wǎng)絡(luò)庫(kù)的一些API函數(shù)實(shí)現(xiàn)分布在不同主機(jī)的相關(guān)進(jìn)程...
    onlyHalfSoul閱讀 666評(píng)論 0 1
  • 曾經(jīng)為了記錄孩子的成長(zhǎng)點(diǎn)滴而喜歡在QQ上寫日志,那里收集著他的點(diǎn)滴變化丛肮,現(xiàn)在再次翻閱起來(lái)也像是重溫與他一起成...
    Vitcor閱讀 166評(píng)論 0 0
  • 被深愛的靈魂 從未離開過 若相愛 至深 至底
    旭敏閱讀 281評(píng)論 2 17