資源描述:
《android網(wǎng)絡(luò)編程 基于socket 的通信》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、Android網(wǎng)絡(luò)編程實(shí)踐之旅(二):基于Socket的網(wǎng)絡(luò)通信???????Socket(套接字)是一種通信機(jī)制,可以實(shí)現(xiàn)單機(jī)或跨網(wǎng)絡(luò)進(jìn)行通信,其創(chuàng)建需要明確的區(qū)分C(客戶(hù)端)/S(服務(wù)器端),支持多個(gè)客戶(hù)端連接到同一個(gè)服務(wù)器。有兩種傳輸模式:1)、面向連接的傳輸:基于TCP協(xié)議,可靠性高,但效率低;2)、面向無(wú)連接的傳輸:基于UDP協(xié)議,可靠性低,但效率高;???????Android中,直接采用Socket通信應(yīng)該是我們遇到的最低級(jí)的網(wǎng)絡(luò)運(yùn)用。盡管已經(jīng)作了很大程度的抽象,但是純粹的Socket通信,仍然給開(kāi)發(fā)者留下
2、很多細(xì)節(jié)需要處理,尤其在服務(wù)器端,開(kāi)發(fā)者需要處理多線程以及數(shù)據(jù)緩沖等的設(shè)計(jì)問(wèn)題。相對(duì)而言,處于更高抽象層的HTTP等,已經(jīng)對(duì)Socket通信中需要處理的技術(shù)細(xì)節(jié)進(jìn)行了很好的封裝,開(kāi)發(fā)者無(wú)須關(guān)心,因此,HTTP在網(wǎng)絡(luò)開(kāi)發(fā)中通常具有決定性的優(yōu)勢(shì)。???????Android在其核心庫(kù)的java包中,提供了用于客戶(hù)端的Socketclass和用于服務(wù)器端的ServerSocketclass,分別位于$SOURCE/libcore/luni/src/main/java/java/net/Socket.java和$SOURCE/l
3、ibcore/luni/src/main/java/java/net/ServerSocket.java文件中。分析兩個(gè)class的源碼,可以看出封裝考慮的很全面,只構(gòu)造方法一向每個(gè)class都考慮了很多種使用情況。由于本人只是初學(xué)者,很多理解的不深入,這里只拋磚引玉的對(duì)兩個(gè)class的構(gòu)造方法分別介紹一種,就是我下面的程序中用到的:Socket(StringdstName,intdstPort):創(chuàng)建一個(gè)以流的方式(基于TCP協(xié)議)連接到目標(biāo)機(jī)(這里可以理解為服務(wù)器)的客戶(hù)端Socket;dstName是目標(biāo)機(jī)的IP地
4、址,dstPort是要連接的目標(biāo)機(jī)的端?口號(hào)。這里要注意對(duì)端口的理解,它不能理解為物理上的一個(gè)接口,而是對(duì)計(jì)算機(jī)中一塊特殊內(nèi)存區(qū)域的形象表述。ServerSocket(intaport):創(chuàng)建一個(gè)綁定到本機(jī)指定端口的服務(wù)端Socket;aport就是指定的本機(jī)端口。與上述客戶(hù)端Socket對(duì)應(yīng),通過(guò)TCP連接時(shí),ServerSocket創(chuàng)建后需要在aport端口上進(jìn)行監(jiān)聽(tīng),等待客戶(hù)端的連接。???????上面所寫(xiě)都是些背景知識(shí),下面對(duì)本人的編程實(shí)踐進(jìn)行詳細(xì)說(shuō)明。1、功能描述????1)、簡(jiǎn)單的基于Socket的數(shù)據(jù)通信;
5、????2)、采用TCP方式連接;????3)、采用C/S結(jié)構(gòu),但服務(wù)端只支持一個(gè)連接;????4)、客戶(hù)端能夠向服務(wù)端發(fā)送數(shù)據(jù),并顯示服務(wù)端的返回信息;????5)、服務(wù)端能夠接收客戶(hù)端的數(shù)據(jù),并將收到的數(shù)據(jù)以特定的方式返回給客戶(hù)端;2、程序?qū)崿F(xiàn)思路???1)、服務(wù)端:設(shè)計(jì)為在后臺(tái)執(zhí)行的service,用一個(gè)獨(dú)立的線程來(lái)處理客戶(hù)端的連接請(qǐng)求、數(shù)據(jù)接收和返回。為了啟動(dòng)該service,編寫(xiě)個(gè)簡(jiǎn)單的Activity。???2)、客戶(hù)端:設(shè)計(jì)為一個(gè)Activity,界面由三部分組成:顯示服務(wù)端返回信息的文本區(qū)域(一個(gè)文本框)
6、;進(jìn)行數(shù)據(jù)輸入的編輯區(qū)域(一個(gè)編輯框);以及觸發(fā)連接請(qǐng)求并執(zhí)行數(shù)據(jù)發(fā)送的觸發(fā)區(qū)域(一個(gè)按鈕)。3、服務(wù)端源程序???1)、Activity文件SocketServerDemo.javaviewplaincopytoclipboardprint?1.package?com.android.sample.SocketServerDemo;??2.??3.import?android.app.Activity;??4.import?android.content.Intent;??5.import?android.os.Bun
7、dle;??6.??7.public?class?SocketServerDemo?extends?Activity{??8.??9.????@Override??10.????protected?void?onCreate(Bundle?savedInstanceState)?{??11.????????//?TODO?Auto-generated?method?stub??12.????????super.onCreate(savedInstanceState);??13.??????????1.????????se
8、tContentView(R.layout.main);??2.??????????3.????????System.out.println("begin?start?service");???4.????????this.startService(new?Intent(this,?SocketService.cla