Android socket實(shí)現(xiàn)原理詳解 服務(wù)端和客戶端如何搭建
本文實(shí)例為大家分享了Android socket的實(shí)現(xiàn)原理,供大家參考,具體內(nèi)容如下
Socket套接字
是網(wǎng)絡(luò)上具有唯一標(biāo)識(shí)的IP地址和端口號(hào)組合在一起才能構(gòu)成唯一能識(shí)別的標(biāo)識(shí)符套接字。
socket實(shí)現(xiàn)的原理機(jī)制:
1、通信的兩端都有Socket
2、網(wǎng)絡(luò)通信其實(shí)就是Socket間的通信
3、數(shù)據(jù)在兩個(gè)Socket間通過(guò)IO傳輸
建立Socket(客戶端)和ServerSocket(服務(wù)器端)
建立連接后,通過(guò)Socket中的IO流進(jìn)行數(shù)據(jù)的傳輸
關(guān)閉socket
同樣,客戶端與服務(wù)器端是兩個(gè)獨(dú)立的應(yīng)用程序。
服務(wù)器端思路
1、建立服務(wù)器端的socket服務(wù),需要一個(gè)端口
2、服務(wù)端沒(méi)有直接的操作,而是通過(guò)accept方法獲取客戶端對(duì)象,在通過(guò)獲取到的客戶端對(duì)象的流和客戶端進(jìn)行通信
3、通過(guò)客戶端獲取流對(duì)象的方法,讀取數(shù)據(jù)或者寫入數(shù)據(jù)
4、如果服務(wù)完成,需要關(guān)閉客戶端,然后關(guān)閉服務(wù)器,但是,一般會(huì)關(guān)閉客戶端,不會(huì)關(guān)閉服務(wù)器,因?yàn)榉?wù)端是一直提供服務(wù)的
服務(wù)端實(shí)現(xiàn)代碼
// 創(chuàng)建服務(wù)器端 ServerSocket server = new ServerSocket(5555); while(true){ // 等待連接 Socket accept = server.accept(); OutputStream outputStream = accept.getOutputStream(); outputStream.write("你好,我是服務(wù)器!\r\n".getBytes()); outputStream.flush(); // 讀取數(shù)據(jù) InputStream inputStream = accept.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); System.out.println("服務(wù)器:" + reader.readLine()); outputStream.close(); inputStream.close(); }
客戶端思路
1、建立客戶端的Socket服務(wù),并明確要連接的服務(wù)器。
2、如果連接建立成功,就表明,已經(jīng)建立了數(shù)據(jù)傳輸?shù)耐ǖ?就可以在該通道通過(guò)IO進(jìn)行數(shù)據(jù)的讀取和寫入.該通道稱為Socket流,Socket流中既有讀取流,也有寫入流.
3、通過(guò)Socket對(duì)象的方法,可以獲取這兩個(gè)流
4、通過(guò)流的對(duì)象可以對(duì)數(shù)據(jù)進(jìn)行傳輸
5、如果傳輸數(shù)據(jù)完畢,關(guān)閉資源
客戶端實(shí)現(xiàn)代碼
//創(chuàng)建套接字 確定要連接的服務(wù)器ip與端口口 Socket socket=new Socket("172.17.23.77",5555); InputStream inputStream = socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(inputStream)); String readLine = br.readLine(); System.out.println("客戶端:"+readLine); //向服務(wù)器發(fā)送消息 OutputStream outputStream = socket.getOutputStream(); outputStream.write("你好\r\n".getBytes()); outputStream.flush(); outputStream.close(); inputStream.close();
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android Socket通信詳解
- Android編程之客戶端通過(guò)socket與服務(wù)器通信的方法
- Android中Socket通信的實(shí)現(xiàn)方法概述
- Android中使用WebSocket實(shí)現(xiàn)群聊和消息推送功能(不使用WebView)
- Android NDK中socket的用法以及注意事項(xiàng)分析
- python服務(wù)器與android客戶端socket通信實(shí)例
- android開發(fā)socket編程之udp發(fā)送實(shí)例分析
- Android中使用socket通信實(shí)現(xiàn)消息推送的方法詳解
- Android使用socket創(chuàng)建簡(jiǎn)單TCP連接的方法
- Android編程實(shí)現(xiàn)基于局域網(wǎng)udp廣播自動(dòng)建立socket連接的方法
相關(guān)文章
Android優(yōu)化查詢加載大數(shù)量的本地相冊(cè)圖片
本文介紹了Android優(yōu)化查詢加載大數(shù)量的本地相冊(cè)圖片,可以方便的照片的查詢,,感興趣的小伙伴們可以參考一下。2016-10-10Android Studio 運(yùn)行按鈕灰色的完美解決方法
今天新建項(xiàng)目的時(shí)候突然發(fā)現(xiàn)編譯后運(yùn)行按鈕為灰色,今天小編給大家?guī)?lái)了Android Studio 運(yùn)行按鈕灰色的完美解決方法,非常不錯(cuò),對(duì)大家的需要或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-10-10詳解Android應(yīng)用開發(fā)中Intent的作用及使用方法
這篇文章主要介紹了Android應(yīng)用開發(fā)中Intent的作用與用法,包括如何激活A(yù)ctivity組件與Intent的投遞等,需要的朋友可以參考下2016-03-03Android編程之ActionBar Tabs用法實(shí)例分析
這篇文章主要介紹了Android編程之ActionBar Tabs用法,結(jié)合實(shí)例形式分析了ActionBar Tabs的功能及Tab切換不同的Fragment的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03Android 中為什么要用Fragment.setArguments(Bundle bundle)來(lái)傳遞參數(shù)
這篇文章主要介紹了Android 中為什么要用Fragment.setArguments(Bundle bundle)來(lái)傳遞參數(shù),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01簡(jiǎn)單實(shí)現(xiàn)Android本地音樂(lè)播放器
這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)Android本地音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Android頁(yè)面中可編輯與不可編輯切換的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于在Android頁(yè)面中可編輯與不可編輯切換的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07