Android - Socket簡(jiǎn)單使用

一:服務(wù)端 ServerSocket

  • ServerSocket包含一個(gè)監(jiān)聽來自客戶端連接請(qǐng)求的方法:accept();
    如果服務(wù)端接收到一個(gè)客戶端的Socket連接請(qǐng)求虚汛,會(huì)返回一個(gè)與客戶端Socket對(duì)應(yīng)的服務(wù)端Socket匾浪,否則該方法一直處于等待狀態(tài),線程阻塞卷哩。

ServerSocket類提供如下構(gòu)造器:

  • ServerSocket(int port);
    使用指定端口來創(chuàng)建蛋辈,port范圍:0-65535。注意将谊,在選擇端口時(shí)冷溶,必須小心。每一個(gè)端口提供一種特定的服務(wù)尊浓,只有給出正確的端口逞频,才能獲得相應(yīng)的服務(wù)。0~1023的端口號(hào)為系統(tǒng)所保留栋齿,例如http服務(wù)的端口號(hào)為80,telnet服務(wù)的端口號(hào)為21,ftp服務(wù)的端口號(hào)為23, 所以我們?cè)谶x擇端口號(hào)時(shí)苗胀,最好選擇一個(gè)大于1023的數(shù)以防止發(fā)生沖突。

  • ServerSocket(int port, int backlog);
    增加一個(gè)用來改變連接隊(duì)列長(zhǎng)度的參數(shù)backlog瓦堵。

  • ServerSocket(int port, int backlog, InetAddress bindAddr);
    在機(jī)器存在多個(gè)IP地址的情況下基协,bindAddr參數(shù)指定將ServerSocket綁定到指定IP。

當(dāng)ServerSocket使用完畢菇用,應(yīng)使用close()方法來關(guān)閉此ServerSocket澜驮。通常情況下,服務(wù)器不應(yīng)該只接收一個(gè)客戶端請(qǐng)求惋鸥,而應(yīng)該不斷接收來自客戶端的請(qǐng)求泉唁,所以程序可以通過循環(huán)鹅龄,不斷調(diào)用ServerSocket的accept方法:

while (true) {
     Socket socket = serverSocket.accept();//阻塞
     ....
}

二:客戶端 Socket

Socket 常用構(gòu)造器

  • Socket(InetAddress/String remoteAddress, int port);
    創(chuàng)建連接到指定遠(yuǎn)程主機(jī)、遠(yuǎn)程端口的Socket亭畜,本地IP地址和端口使用默認(rèn)值。

  • Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, int localPort);
    綁定本地IP地址和端口迎卤,適用于本地主機(jī)有多個(gè)IP地址的情形拴鸵。

注:上面兩個(gè)構(gòu)造器指定遠(yuǎn)程主機(jī)時(shí)既可以使用InetAddress來指定,也可以直接使用String對(duì)象來指定遠(yuǎn)程IP蜗搔。本地主機(jī)只有一個(gè)IP地址時(shí)劲藐,使用第一個(gè)方法更簡(jiǎn)單。

三樟凄、心跳機(jī)制

在與服務(wù)器進(jìn)行通訊的時(shí)候聘芜,無法判斷遠(yuǎn)程的服務(wù)器是否斷開連接。如果使用OutputStream發(fā)送數(shù)據(jù)則會(huì)影響正常的數(shù)據(jù)發(fā)送(無法區(qū)分)缝龄。所以就引入了一個(gè)心跳機(jī)制汰现。

心跳機(jī)制實(shí)現(xiàn),使用Socket.sendUrgentData()方法發(fā)送一個(gè)字節(jié)流數(shù)據(jù)(緊急數(shù)據(jù))叔壤∠顾牵可以通過判斷服務(wù)端的OOBINLINE屬性是否打開,來確定是否斷開連接炼绘;

當(dāng)設(shè)置OOBINLINE選項(xiàng)時(shí)嗅战,套接字上接收到的任何TCP緊急數(shù)據(jù)將通過套接字輸入流接收。當(dāng)該選項(xiàng)被禁用時(shí)(這是默認(rèn)設(shè)置)俺亮,緊急數(shù)據(jù)將被靜默丟棄驮捍。

setSoTimeout()理解:設(shè)置超時(shí)時(shí)間;例如:設(shè)置為2s脚曾,如果阻塞的時(shí)間>2s 东且,那么就會(huì)報(bào)錯(cuò)。

[SO_TIMEOUT] 使用指定的超時(shí)啟用/禁用斟珊,以毫秒為單位苇倡。如果將此選項(xiàng)設(shè)置為非零超時(shí),則與此Socket關(guān)聯(lián)的InputStream上的read()調(diào)用將僅阻塞這段時(shí)間囤踩。如果超時(shí)過期旨椒,則會(huì)引發(fā)java.net.SocketTimeoutException,但Socket仍然有效堵漱。該選項(xiàng)必須在進(jìn)入阻止操作生效之前啟用综慎。超時(shí)必須是> 0。超時(shí)為零被解釋為無限超時(shí)勤庐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末示惊,一起剝皮案震驚了整個(gè)濱河市好港,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌米罚,老刑警劉巖钧汹,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異录择,居然都是意外死亡拔莱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門隘竭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塘秦,“玉大人,你說我怎么就攤上這事动看∽鹛蓿” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵菱皆,是天一觀的道長(zhǎng)须误。 經(jīng)常有香客問我,道長(zhǎng)搔预,這世上最難降的妖魔是什么霹期? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮拯田,結(jié)果婚禮上历造,老公的妹妹穿的比我還像新娘。我一直安慰自己船庇,他們只是感情好吭产,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸭轮,像睡著了一般臣淤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窃爷,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天邑蒋,我揣著相機(jī)與錄音,去河邊找鬼按厘。 笑死医吊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逮京。 我是一名探鬼主播卿堂,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了草描?” 一聲冷哼從身側(cè)響起览绿,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎穗慕,沒想到半個(gè)月后饿敲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逛绵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年诀蓉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑脆。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狐肢,靈堂內(nèi)的尸體忽然破棺而出添吗,到底是詐尸還是另有隱情,我是刑警寧澤份名,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布碟联,位于F島的核電站,受9級(jí)特大地震影響僵腺,放射性物質(zhì)發(fā)生泄漏鲤孵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一辰如、第九天 我趴在偏房一處隱蔽的房頂上張望普监。 院中可真熱鬧,春花似錦琉兜、人聲如沸凯正。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)廊散。三九已至,卻和暖如春梧疲,著一層夾襖步出監(jiān)牢的瞬間允睹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工幌氮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缭受,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓浩销,卻偏偏與公主長(zhǎng)得像贯涎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慢洋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塘雳,服務(wù)發(fā)現(xiàn)陆盘,斷路器,智...
    卡卡羅2017閱讀 134,701評(píng)論 18 139
  • 1 網(wǎng)絡(luò)編程----TCPNo24 【 public class Server { public static...
    征程_Journey閱讀 1,263評(píng)論 0 4
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎(chǔ)知識(shí) 密鑰:一般就是一個(gè)字符串或數(shù)字败明,在加密或者解密時(shí)傳遞給加密/解密算...
    AndroidMaster閱讀 4,014評(píng)論 1 8
  • 一隘马、通信前提 兩臺(tái)計(jì)算機(jī)要進(jìn)行通信,就要滿足以下條件:1.兩臺(tái)主機(jī)要有唯一的標(biāo)識(shí)妻顶,也就是IP地址酸员,用來表示它們所處...
    不知名的蛋撻閱讀 692評(píng)論 0 0
  • 斯人若彩虹. 遇上方知有. 昨晚做夢(mèng)回到自己的小學(xué).那個(gè)時(shí)候自己對(duì)寫字無比熱愛,還有著一些筆友.到現(xiàn)在也直接選擇網(wǎng)...
    燃帛帛閱讀 118評(píng)論 0 0