android socket通訊

來源:互聯網
上載者:User

Android作為完全開源的手機平台,已經被非常多的開發人員視作未來最有潛力的智能手機作業系統。 
而且短時間內已經有大量的第三方應用程式出現在Android Market供使用者下載和使用, 
其中有一些程式增強了手機的應用功能,而另外一些會充分的發揮手機與其它電子裝置的互動。 
今天將主要通過兩個例子講解如何?Android與PC通訊。 
1. Android與PC通訊的第一個例子: 
PC: Java Server 
Android:Java Client 
Java Server 原始碼: 
public class TCPDesktopServer implements Runnable{<br /> public static final String SERVERIP = "192.168.0.149";<br /> public static final int SERVERPORT = 51706; </p><p> public void run() {<br /> try {<br /> System.out.println("S: Connecting...");<br /> ServerSocket serverSocket = new ServerSocket(SERVERPORT);<br /> while (true) {<br /> Socket client = serverSocket.accept();<br /> System.out.println("S: Receiving...");<br /> try {<br /> BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));<br /> String str = in.readLine();<br /> System.out.println("S: Received: '" + str + "'");<br /> } catch(Exception e) {<br /> System.out.println("S: Error");<br /> e.printStackTrace();<br /> } finally {<br /> client.close();<br /> System.out.println("S: Done.");<br /> }<br /> }<br /> } catch (Exception e) {<br /> System.out.println("S: Error");<br /> e.printStackTrace();<br /> }<br /> }<br /> public static void main (String a[]) {<br /> Thread desktopServerThread = new Thread(new TCPDesktopServer());<br /> desktopServerThread.start();<br /> }<br />}

對上邊的原始碼做一些介紹: 
指定Server監聽的連接埠和伺服器IP地址。 

public static final String SERVERIP = "192.168.0.149"; 

public static final int SERVERPORT = 51706; 

應用之前所指定的IP和Port建立一個ServerSocket對象。 
ServerSocket serverSocket = new ServerSocket(SERVERPORT); 

用於偵聽和捕捉通過Socket串連的用戶端。 
Socket client = serverSocket.accept();

應用Socket建立BufferedReader對象,用於接收Socket Stream中的資料。 
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

Android Client 原始碼: 
InetAddress serverAddr = InetAddress.getByName("192.168.0.149");//TCPServer.SERVERIP<br />Log.d("TCP", "C: Connecting...");<br />Socket socket = new Socket(serverAddr, 51706);<br />String message = "AndroidRes,Where is my Pig (Android)?";<br />try {<br /> Log.d("TCP", "C: Sending: '" + message + "'");<br /> PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);<br /> out.println(message);<br />} catch(Exception e) {<br /> Log.e("TCP", "S: Error", e);<br />} finally {<br /> socket.close();<br />}<br />

對上邊的原始碼做一些介紹: 
指定Server的IP地址。 
InetAddress serverAddr = InetAddress.getByName("192.168.0.149"); 

應用Server的IP和連接埠建立Socket對象。 
Socket socket = new Socket(serverAddr, 51706); 

根據已經建立的Socket來建立PrintWriter,將資訊通過這個對象來發送給Server,其中包含了三個部分: 
OutputStreamWriter 
BufferedWriter 
PrintWriter 
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); 

以上是Android與運行在PC上的Java Server通訊的例子。來源由Anddev.org提供 
2. Android與PC通訊的第二個例子: 
PC: CSharp Server 
Android:Java Client 

通過上邊的例子,本人通過一些轉換,實現了Android與CSharp Server的通訊方法。原理沒有太大差異,僅僅是應用的方法稍有不同。 
CSharp Server 原始碼: 

TcpClient ConnectedClient = ServerListener.AcceptTcpClient(); NetworkStream netStream = ConnectedClient.GetStream(); BinaryReader br = new BinaryReader(netStream); byte[] tempByte = new byte[8192]; tempByte = br.ReadBytes(8192); string RecevieString = System.Text.Encoding.Default.GetString(tempByte); 

對上邊的原始碼做一些介紹: 
通過TcpListener獲得的Client資訊建立一個TcpClient對象。 
TcpClient ConnectedClient = ServerListener.AcceptTcpClient(); 

從TcpClient對象中提取NetworkStream對象,其目的是建立Socket資料流。 
NetworkStream netStream = ConnectedClient.GetStream(); 

建立BinaryReader對象為剛剛建立的NetworkStream提供一個介面,藉助於這個介面可以非常方便的讀取資訊。 
BinaryReader br = new BinaryReader(netStream); 

讀取Stream中的byte array資料,轉化為string字串。 
byte[] tempByte = new byte[8192]; 
tempByte = br.ReadBytes(8192); 
string RecevieString = System.Text.Encoding.Default.GetString(tempByte); 

Android Client 原始碼: 
這個Android Client所應用的方法與第一個例子中有很大區別,請各位特別注意(通過本人的反覆驗證,這個算是Java 與CSharp間可行的通訊方法)。 
String message = "AndroidRes,Where is my Pig (Android)?";<br />Socket socket = new Socket("192.168.0.149", 51706);<br />OutputStream ops=socket.getOutputStream();<br />DataOutputStream dos=new DataOutputStream(ops);<br />dos.write(message.getBytes());<br />dos.close();

對上邊的原始碼做一些介紹: 
同樣是建立Socket對象。 
Socket socket = new Socket("192.168.0.149", 51706); 

根據Socket對象建立OutputStream對象,根據名稱可以很容易的理解這個對象的目的,它是建立一個輸出的NetworkStream。 
OutputStream ops=socket.getOutputStream(); 

DataOutputStream類似於BinaryWriter,是為OutputStream建立一個介面,可以通過這個介面向Socket另外一端寫資料。 
DataOutputStream dos=new DataOutputStream(ops);

最後這兩行代碼是實施寫的過程。
dos.write(message.getBytes());
dos.close();

以上就是本站為大家提供的兩種Android與PC間通訊的方式(其中第一個方法來自Anddev.org,這裡要特別指出)。
如果你有更巧妙或者更方便的方法,希望能與大家共同分享!

注意需要在AndroidManifest.xml中加入(許可權開通)
<uses-permission android:name="android.permission.INTERNET" />  




《附》逾時處理:

socket = new Socket();<br /> isa = new InetSocketAddress(HOST,PORT);<br /> socket.connect(isa,TIMEOUT); //TIMEOUT為逾時時間 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.