日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Android開(kāi)發(fā)Socket編程

一.Socket簡(jiǎn)介

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括蘄春網(wǎng)站建設(shè)、蘄春網(wǎng)站制作、蘄春網(wǎng)頁(yè)制作以及蘄春網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,蘄春網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到蘄春省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

1.所謂Socket通常也稱(chēng)作“套接字”,用于描述IP地址和端口,是一個(gè)通信鏈的句柄
2.應(yīng)用程序通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)送請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求
3.Socket有兩種主要的操作方式:面向連接(TCP)的和無(wú)連接的(UDP)。
4.Java.net中提供了兩個(gè)類(lèi)Socket和ServerSocket,分別用來(lái)表示雙向連接的客戶(hù)端和服務(wù)端。
一個(gè)客戶(hù)端要發(fā)起一次通信,首先必須知道運(yùn)行服務(wù)器端的主機(jī)IP地址。然后由網(wǎng)絡(luò)基礎(chǔ)設(shè)施利用目標(biāo)地址,將客戶(hù)端發(fā)送的信息傳遞到正確的主機(jī)上,在 Java中,地址可以由一個(gè)字符; 串來(lái)定 義,這個(gè)字符串可以使數(shù)字型的地址(比如192.168.1.1),也可以是主機(jī)名(example.com)。在 Java中InetAddress類(lèi)代表了一個(gè)網(wǎng)絡(luò)目標(biāo)地址,包括主機(jī)名和數(shù)字類(lèi)型的地址信息。

二.使用基于TCP協(xié)議的Socket

1.ServerSocket:
ServerSocket:這個(gè)類(lèi)是實(shí)現(xiàn)了一個(gè)服務(wù)器端的Socket,利用這個(gè)類(lèi)可以監(jiān)聽(tīng)來(lái)自網(wǎng)絡(luò)的請(qǐng)求。
(a)創(chuàng)建ServerSocket的方法:
ServerSocket(IntlocalPort)
ServerSocket(int localport,intqueueLimit)
ServerSocket(int localport,intqueueLimit,InetAddress localAddr)
創(chuàng)建一個(gè)ServerSocket必須指定一個(gè)端口,以便客戶(hù)端能夠向該端口號(hào)發(fā)送連接請(qǐng)求。端口的有效范圍是0-65535(0-1023是系統(tǒng)預(yù)留的,最好大于1024)
0~1023的端口號(hào)為系統(tǒng)所保留,例如http服務(wù)的端口號(hào)是80,telnet服務(wù)的端口號(hào)為21,ftp為23。所以我們?cè)谶x擇端口號(hào)時(shí)最好選擇大 于1023的數(shù),防止發(fā)生沖突。在創(chuàng)建 Socket時(shí),如果發(fā)生錯(cuò)誤,將產(chǎn)生IOException,在程序中必須對(duì)其進(jìn)行處理。所以在創(chuàng)建Socket 或ServerSocket時(shí)必須捕獲或拋出異常。
    (b)ServerSocket操作
        (1)Socketaccept()
                       accept()方法為下一個(gè)傳入的連接請(qǐng)求創(chuàng)建Socket實(shí)例,并將已成功連接的Socket實(shí)例返回給服務(wù)器套接字,如果沒(méi)有連接請(qǐng)求,accept()方法將阻塞等待;
        (2)void close
                       close方法用于關(guān)閉套接字

2.Socket
   (a)創(chuàng)建Socket的方法:
        Socket(InetAddress remoteAddress,intremotePort)
        利用Socket構(gòu)造函數(shù),可創(chuàng)建一個(gè)TCP套接字后,先連接到指定的遠(yuǎn)程地址和端口號(hào)。
        Socket(InetAddress address,int port ,InetAddress localAddr ,intlocalPort)
        Socket(InetAddress address, int port ,booleanstream)
        Socket(SocketImpl impl)
        address、host、port分別表示雙向連接中另一方的IP地址、主機(jī)名、端口號(hào)
        stream指明Socket是流Socket還是數(shù)據(jù)報(bào)Socket
        localAddr,bindAddr是本地機(jī)器的地址(ServerSocket的主機(jī)地址)
        impl是Socket的父類(lèi),既可以創(chuàng)建ServerSocket,也可創(chuàng)建Socket
  (b)操作Socket的方法
         通信過(guò)程中順序:服務(wù)器端首先得到輸入流,然后將輸入流信息輸出到其各個(gè)客戶(hù)端
         Socket提供了getInputStream()和getOutputStream()方法來(lái)得到輸入輸出流。然后再對(duì)輸入流輸出流進(jìn)行讀寫(xiě)操作,例 如,對(duì)于服務(wù)器端,得到Socket對(duì)象后,調(diào)用getInputStream方法即  可得到來(lái)自客戶(hù)端的流,調(diào)用getOutStream方法可得到向客 戶(hù)端發(fā)送數(shù)據(jù)的流。對(duì)于客戶(hù)端,調(diào)用getInputStream方法即可得到來(lái)自服務(wù)器的流,調(diào)用getOutStream方法可得到向服務(wù)器端發(fā)送  數(shù) 據(jù)的流。
         InputStreamgetInputStream()
         OutputStreamgetOutputStream()
         可調(diào)用Socket的close()方法進(jìn)行關(guān)閉,在關(guān)閉前,應(yīng)將與Socket相關(guān)的所有輸入輸出流關(guān)閉,正著打開(kāi),倒著關(guān)閉。

3.編程步驟:
       創(chuàng)建服務(wù)器的步驟:
       指定端口實(shí)例化一個(gè)ServerSocket調(diào)用ServerSocket的accept方法以在等待連接期間造成阻塞獲取位于該底層Socket的流以進(jìn)行讀寫(xiě)操作將數(shù)據(jù)封裝成流對(duì)Socket進(jìn)行讀寫(xiě)關(guān)閉打開(kāi)的流
       創(chuàng)建客戶(hù)端的步驟:
       通過(guò)IP地址和端口實(shí)例化Socket,請(qǐng)求連接服務(wù)器獲取Socket上的流以進(jìn)行讀寫(xiě)把流包裝進(jìn)BufferedReader/PrintWriter的實(shí)例對(duì)Socket進(jìn)行讀寫(xiě)關(guān)閉打開(kāi)的流

       當(dāng)要監(jiān)控多個(gè)客戶(hù)端時(shí),可使用類(lèi)ExecutorService
       其對(duì)象獲取方法:Executors.newCachedThreadPool();
       調(diào)用該對(duì)象的execute(Runnablecommand)即可,在未來(lái)某個(gè)時(shí)間執(zhí)行給定的命令。該命令可能在新的線(xiàn)程、已入池的線(xiàn)程或者正調(diào)用的線(xiàn)程中執(zhí)行,這由Executor實(shí)現(xiàn)決定

三.使用基于UDP的Socket

  (a)創(chuàng)建DatagramSocket
               DatagramSocket(byte [] data,intoffset,int length,InetAddress remoteAddr,intremotePort)
               該構(gòu)造函數(shù)創(chuàng)建一個(gè)數(shù)據(jù)報(bào)文對(duì)象,數(shù)據(jù)包含在第一個(gè)參數(shù)data當(dāng)中
               Offset是指偏移量長(zhǎng)度,length是指數(shù)據(jù)包長(zhǎng)度。
       (b)創(chuàng)建DatagramSocket
               DatagramSocket(intlocalPort)
               以上構(gòu)造函數(shù)將創(chuàng)建一個(gè)UDP套接字;
       (c)DatagramSocket:發(fā)送和接受
               void send(DatagramPacketpacket)
               void receive(DatagramPacketpacket)
               send()方法用來(lái)發(fā)送DatagramPacket實(shí)例。一旦創(chuàng)建連接,數(shù)據(jù)報(bào)將發(fā)送到該套接字所連接的地址;
               receive()方法將阻塞等待,知道接收到數(shù)據(jù)報(bào)文,并將報(bào)文中的數(shù)據(jù)復(fù)制到指定的DatagramPacket實(shí)例中。

補(bǔ)充:

           對(duì)AndroidManifest.xml的配置一定不要忘了:
          

            輸入和輸出流要用DataOutputStream和DataOutputStream,不可以用PrintWriter、StreamReader等。

【責(zé)任編輯: 閆佳明 TEL:(010)68476606】


分享標(biāo)題:Android開(kāi)發(fā)Socket編程
分享地址:http://www.dlmjj.cn/article/dpjjeed.html