android socket通信
Android作爲完全開源的手機平臺,已經被非常多的開發者視作未來最有潛力的智能手機操作系統。
而且短時間內已經有大量的第三方應用程序出現在Android Market供用戶下載和使用,
其中有一些程序增強了手機的應用功能,而另外一些會充分的發揮手機與其它電子設備的互動。
今天將主要通過兩個例子講解如何實現Android與PC通訊。
1. Android與PC通訊的第一個例子:
PC: Java Server
Android:Java Client
Java Server 源代碼:
01.public class TCPDesktopServer implements Runnable{
2
03. public static final String SERVERIP = "192.168.0.149";
04. public static final int SERVERPORT = 51706;
5
06. public void run() {
07. try {
08. System.out.println("S: Connecting...");
9
10. ServerSocket serverSocket = new ServerSocket(SERVERPORT);
11. while (true) {
12
13. Socket client = serverSocket.accept();
14. System.out.println("S: Receiving...");
15
16. try {
17. BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
18. String str = in.readLine();
19. System.out.println("S: Received: '" + str + "'");
20. } catch(Exception e) {
21. System.out.println("S: Error");
22. e.printStackTrace();
23. } finally {
24. client.close();
25. System.out.println("S: Done.");
26. }
27
28. }
29
30. } catch (Exception e) {
31. System.out.println("S: Error");
32. e.printStackTrace();
33. }
34. }
35
36. public static void main (String a[]) {
37. Thread desktopServerThread = new Thread(new TCPDesktopServer());
38. desktopServerThread.start();
39. }
40.}
對上邊的源代碼做一些介紹:
指定Server監聽的端口和服務器IP地址。
1.public static final String SERVERIP = "192.168.0.149";
2.public static final int SERVERPORT = 51706;
應用之前所指定的IP和Port創建一個ServerSocket對象。
1.ServerSocket serverSocket = new ServerSocket(SERVERPORT);
用於偵聽和捕捉通過Socket連接的客戶端。
1.Socket client = serverSocket.accept();
應用Socket創建BufferedReader對象,用於接收Socket Stream中的數據。
1.BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
Android Client 源代碼:
01.InetAddress serverAddr = InetAddress.getByName("192.168.0.149");//TCPServer.SERVERIP
02.Log.d("TCP", "C: Connecting...");
03.Socket socket = new Socket(serverAddr, 51706);
04.String message = "AndroidRes,Where is my Pig (Android)?";
05.try {
06. Log.d("TCP", "C: Sending: '" + message + "'");
07. PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
08. out.println(message);
09.} catch(Exception e) {
10. Log.e("TCP", "S: Error", e);
11.} finally {
12. socket.close();
13.}
對上邊的源代碼做一些介紹:
指定Server的IP地址。
1.InetAddress serverAddr = InetAddress.getByName("192.168.0.149");
應用Server的IP和端口建立Socket對象。
1.Socket socket = new Socket(serverAddr, 51706);
根據已經建立的Socket來創建PrintWriter,將信息通過這個對象來發送給Server,其中包含了三個部分:
OutputStreamWriter
BufferedWriter
PrintWriter
1.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 源代碼:
01.TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
2
03.NetworkStream netStream = ConnectedClient.GetStream();
4
05.BinaryReader br = new BinaryReader(netStream);
6
07.byte[] tempByte = new byte[8192];
8
09.tempByte = br.ReadBytes(8192);
10
11.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);
對上邊的源代碼做一些介紹:
通過TcpListener獲得的Client信息創建一個TcpClient對象。
1.TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
從TcpClient對象中提取NetworkStream對象,其目的是建立Socket數據流。
1.NetworkStream netStream = ConnectedClient.GetStream();
建立BinaryReader對象爲剛剛創建的NetworkStream提供一個接口,藉助於這個接口可以非常方便的讀取信息。
1.BinaryReader br = new BinaryReader(netStream);
讀取Stream中的byte array數據,轉化爲string字符串。
1.byte[] tempByte = new byte[8192];
2
3.tempByte = br.ReadBytes(8192);
4
5.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);
Android Client 源代碼:
這個Android Client所應用的方法與第一個例子中有很大區別,請各位特別注意(通過本人的反覆驗證,這個算是Java 與CSharp間可行的通訊方法)。
1.String message = "AndroidRes,Where is my Pig (Android)?";
2.Socket socket = new Socket("192.168.0.149", 51706);
3.OutputStream ops=socket.getOutputStream();
4.DataOutputStream dos=new DataOutputStream(ops);
5.dos.write(message.getBytes());
6.dos.close();
對上邊的源代碼做一些介紹:
同樣是建立Socket對象。
1.Socket socket = new Socket("192.168.0.149", 51706);
根據Socket對象創建OutputStream對象,根據名稱可以很容易的理解這個對象的目的,它是建立一個輸出的NetworkStream。
1.OutputStream ops=socket.getOutputStream();
DataOutputStream類似於BinaryWriter,是爲OutputStream建立一個接口,可以通過這個接口向Socket另外一端寫數據。
1.DataOutputStream dos=new DataOutputStream(ops);
最後這兩行代碼是實施寫的過程。
1.dos.write(message.getBytes());
2.dos.close();
以上就是本站爲大家提供的兩種Android與PC間通訊的方式(其中第一個方法來自Anddev.org,這裏要特別指出)。
如果你有更巧妙或者更方便的方法,希望能與大家共同分享!
注意需要在AndroidManifest.xml中加入(權限開通)
<uses-permission android:name="android.permission.INTERNET" />
而且短時間內已經有大量的第三方應用程序出現在Android Market供用戶下載和使用,
其中有一些程序增強了手機的應用功能,而另外一些會充分的發揮手機與其它電子設備的互動。
今天將主要通過兩個例子講解如何實現Android與PC通訊。
1. Android與PC通訊的第一個例子:
PC: Java Server
Android:Java Client
Java Server 源代碼:
01.public class TCPDesktopServer implements Runnable{
2
03. public static final String SERVERIP = "192.168.0.149";
04. public static final int SERVERPORT = 51706;
5
06. public void run() {
07. try {
08. System.out.println("S: Connecting...");
9
10. ServerSocket serverSocket = new ServerSocket(SERVERPORT);
11. while (true) {
12
13. Socket client = serverSocket.accept();
14. System.out.println("S: Receiving...");
15
16. try {
17. BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
18. String str = in.readLine();
19. System.out.println("S: Received: '" + str + "'");
20. } catch(Exception e) {
21. System.out.println("S: Error");
22. e.printStackTrace();
23. } finally {
24. client.close();
25. System.out.println("S: Done.");
26. }
27
28. }
29
30. } catch (Exception e) {
31. System.out.println("S: Error");
32. e.printStackTrace();
33. }
34. }
35
36. public static void main (String a[]) {
37. Thread desktopServerThread = new Thread(new TCPDesktopServer());
38. desktopServerThread.start();
39. }
40.}
對上邊的源代碼做一些介紹:
指定Server監聽的端口和服務器IP地址。
1.public static final String SERVERIP = "192.168.0.149";
2.public static final int SERVERPORT = 51706;
應用之前所指定的IP和Port創建一個ServerSocket對象。
1.ServerSocket serverSocket = new ServerSocket(SERVERPORT);
用於偵聽和捕捉通過Socket連接的客戶端。
1.Socket client = serverSocket.accept();
應用Socket創建BufferedReader對象,用於接收Socket Stream中的數據。
1.BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
Android Client 源代碼:
01.InetAddress serverAddr = InetAddress.getByName("192.168.0.149");//TCPServer.SERVERIP
02.Log.d("TCP", "C: Connecting...");
03.Socket socket = new Socket(serverAddr, 51706);
04.String message = "AndroidRes,Where is my Pig (Android)?";
05.try {
06. Log.d("TCP", "C: Sending: '" + message + "'");
07. PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
08. out.println(message);
09.} catch(Exception e) {
10. Log.e("TCP", "S: Error", e);
11.} finally {
12. socket.close();
13.}
對上邊的源代碼做一些介紹:
指定Server的IP地址。
1.InetAddress serverAddr = InetAddress.getByName("192.168.0.149");
應用Server的IP和端口建立Socket對象。
1.Socket socket = new Socket(serverAddr, 51706);
根據已經建立的Socket來創建PrintWriter,將信息通過這個對象來發送給Server,其中包含了三個部分:
OutputStreamWriter
BufferedWriter
PrintWriter
1.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 源代碼:
01.TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
2
03.NetworkStream netStream = ConnectedClient.GetStream();
4
05.BinaryReader br = new BinaryReader(netStream);
6
07.byte[] tempByte = new byte[8192];
8
09.tempByte = br.ReadBytes(8192);
10
11.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);
對上邊的源代碼做一些介紹:
通過TcpListener獲得的Client信息創建一個TcpClient對象。
1.TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
從TcpClient對象中提取NetworkStream對象,其目的是建立Socket數據流。
1.NetworkStream netStream = ConnectedClient.GetStream();
建立BinaryReader對象爲剛剛創建的NetworkStream提供一個接口,藉助於這個接口可以非常方便的讀取信息。
1.BinaryReader br = new BinaryReader(netStream);
讀取Stream中的byte array數據,轉化爲string字符串。
1.byte[] tempByte = new byte[8192];
2
3.tempByte = br.ReadBytes(8192);
4
5.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);
Android Client 源代碼:
這個Android Client所應用的方法與第一個例子中有很大區別,請各位特別注意(通過本人的反覆驗證,這個算是Java 與CSharp間可行的通訊方法)。
1.String message = "AndroidRes,Where is my Pig (Android)?";
2.Socket socket = new Socket("192.168.0.149", 51706);
3.OutputStream ops=socket.getOutputStream();
4.DataOutputStream dos=new DataOutputStream(ops);
5.dos.write(message.getBytes());
6.dos.close();
對上邊的源代碼做一些介紹:
同樣是建立Socket對象。
1.Socket socket = new Socket("192.168.0.149", 51706);
根據Socket對象創建OutputStream對象,根據名稱可以很容易的理解這個對象的目的,它是建立一個輸出的NetworkStream。
1.OutputStream ops=socket.getOutputStream();
DataOutputStream類似於BinaryWriter,是爲OutputStream建立一個接口,可以通過這個接口向Socket另外一端寫數據。
1.DataOutputStream dos=new DataOutputStream(ops);
最後這兩行代碼是實施寫的過程。
1.dos.write(message.getBytes());
2.dos.close();
以上就是本站爲大家提供的兩種Android與PC間通訊的方式(其中第一個方法來自Anddev.org,這裏要特別指出)。
如果你有更巧妙或者更方便的方法,希望能與大家共同分享!
注意需要在AndroidManifest.xml中加入(權限開通)
<uses-permission android:name="android.permission.INTERNET" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.