標籤:
一、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