Android簡單Socket通訊demo

來源:互聯網
上載者:User

標籤:

一、Android Socket 通訊簡介

Android與伺服器的通訊方式主要有兩種,一是Http通訊,一是Socket通訊。兩者的最大差異在於,http串連使用的是“請求—回應程式式”,即在請求時建立串連通道,當用戶端向伺服器發送請求後,伺服器端才能向用戶端返回資料。而Socket通訊則是在雙方建立起串連後就可以直接進行資料的傳輸,在串連時可實現資訊的主動推送,而不需要每次由用戶端想伺服器發送請求。 那麼,什麼是socket?Socket又稱通訊端,在程式內部提供了與外界通訊的連接埠,即連接埠通訊。通過建立socket串連,可為通訊雙方的資料轉送傳提供通道。socket的主要特點有資料丟失率低,使用簡單且易於移植。

二、理論性東西就不多說了,直接讓我們來看看實現代碼!!!!1

用戶端的實現。

    

 1 //串連到伺服器的介面 2     Runnable connectThread = new Runnable() { 3          4         @Override 5         public void run() { 6             // TODO Auto-generated method stub 7             //初始化Scoket,串連到伺服器 8             try { 9                 socket = new Socket(ServerIP, ServerPort);10                 isConnect = true;11                 //啟動接收線程12                 isReceive = true;13                 receiveThread = new ReceiveThread(socket);14                 receiveThread.start();15                 System.out.println("----connected success----");16             } catch (UnknownHostException e) {17                 // TODO Auto-generated catch block18                 e.printStackTrace();19             } catch (IOException e) {20                 // TODO Auto-generated catch block21                 e.printStackTrace();22             }23             24         }25     };26 //發送訊息的介面27     Runnable sendThread = new Runnable() {28         29         @Override30         public void run() {31             // TODO Auto-generated method stub32             byte[] sendBuffer = null;33             try {34                 sendBuffer = strMessage.getBytes("UTF-8");35             } catch (UnsupportedEncodingException e1) {36                 // TODO Auto-generated catch block37                 e1.printStackTrace();38             }39             try {40                 outStream = socket.getOutputStream();41             } catch (IOException e) {42                 // TODO Auto-generated catch block43                 e.printStackTrace();44             }45             try {46                 outStream.write(sendBuffer);47             } catch (IOException e) {48                 // TODO Auto-generated catch block49                 e.printStackTrace();50             }51         }52     };53 54     //接收線程55     private class ReceiveThread extends Thread{56         private InputStream inStream = null;57         58         private byte[] buffer;59         private String str = null;60         61         ReceiveThread(Socket socket){62             try {63                 inStream = socket.getInputStream();64             } catch (IOException e) {65                 // TODO Auto-generated catch block66                 e.printStackTrace();67             }68         }69         @Override70         public void run(){71             while(isReceive){72                 buffer = new byte[512];73                 try {74                     inStream.read(buffer);75                 } catch (IOException e) {76                     // TODO Auto-generated catch block77                     e.printStackTrace();78                 }79                 try {80                     str = new String(buffer,"UTF-8").trim();81                 } catch (UnsupportedEncodingException e) {82                     // TODO Auto-generated catch block83                     e.printStackTrace();84                 }85                 Message msg = new Message();86                 msg.obj = str;87                 myHandler.sendMessage(msg);88             }89         }
View Code

服務端實現。

 1     //發送資料介面 2     public Runnable runnable=new Runnable() { 3          4         @Override 5         public void run() { 6             // TODO Auto-generated method stub 7             byte[] by=null; 8             try { 9                 10                 by=data.getBytes("GBK");11                 ouStream=socket.getOutputStream();12                 ouStream.write(by);13                 ouStream.flush();14             } catch (IOException e) {15                 // TODO Auto-generated catch block16                 e.printStackTrace();17             }18         }19     };20 21     //接收資料線程22     public class ThreadData extends Thread {23         public InputStream inputStream;24         25     26         @Override  27         public void run() {28             // TODO Auto-generated method stub29             super.run();30         31                 try {32                     ServerSocket serverSocket = new ServerSocket(4567);33                      socket = serverSocket.accept();34                     while (true) {35                         byte[] data = new byte[512];36                     inputStream = socket.getInputStream();37                     inputStream.read(data);38                     String strdata = new String(data, "GBK").trim();39                     40                     Log.e("串連成功", strdata + "");41                     Message msg = handler.obtainMessage();42                     msg.obj=strdata;43                     handler.sendMessage(msg);44                     }45                 } catch (IOException e) {46                     Log.e("ttttttttttt", e.getMessage());47                     e.printStackTrace();48                 }49             50 51         }52     }
View Code

 

Android簡單Socket通訊demo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.