Android通过Socket(TCP/IP)与PC通讯

Android作为完全开源的手机平台,已经被非常多的开发者视作未来最有潜力的智能手机操作系统。而且短时间内已经有大量的第三方应用程序出现在Android Market供用户下载和使用,其中有一些程序增强了手机的应用功能,而另外一些会充分的发挥手机与其它电子设备的互动。今天将主要通过两个例子讲解如何实现Android与PC通讯。

1. Android与PC通讯的第一个例子:

  • PC: Java Server
  • Android:Java Client

Java Server源代码:

01. publicclassTCPDesktopServerimplementsRunnable{ 02. 03.publicstaticfinalString SERVERIP ="192.168.0.149"; 04.publicstaticfinalintSERVERPORT =51706; 05. 06.publicvoidrun() { 07.try{ 08.System.out.println("S: Connecting..."); 09. 10.ServerSocket serverSocket =newServerSocket(SERVERPORT); 11.while(true) { 12. 13.Socket client = serverSocket.accept(); 14.System.out.println("S: Receiving..."); 15. 16.try{ 17.BufferedReader in =newBufferedReader(newInputStreamReader(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.publicstaticvoidmain (String a[]) { 37.Thread desktopServerThread =newThread(newTCPDesktopServer()); 38.desktopServerThread.start(); 39.} 40.}

对上边的源代码做一些介绍:
指定Server监听的端口和服务器IP地址。

1.publicstaticfinalString SERVERIP ="192.168.0.149"; 2.publicstaticfinalintSERVERPORT =51706;

应用之前所指定的IP和Port创建一个ServerSocket对象。

1.ServerSocket serverSocket =newServerSocket(SERVERPORT);

用于侦听和捕捉通过Socket连接的客户端。

1.Socket client = serverSocket.accept();

应用Socket创建BufferedReader对象,用于接收Socket Stream中的数据。

1.BufferedReader in =newBufferedReader(newInputStreamReader(client.getInputStream()));

Android Client源代码:

01.InetAddress serverAddr = InetAddress.getByName("192.168.0.149");//TCPServer.SERVERIP 02.Log.d("TCP","C: Connecting..."); 03.Socket socket =newSocket(serverAddr,51706); 04.String message ="AndroidRes,Where is my Pig (Android)?"; 05.try{ 06.Log.d("TCP","C: Sending: '"+ message +"'"); 07.PrintWriter out =newPrintWriter(newBufferedWriter(newOutputStreamWriter(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 =newSocket(serverAddr,51706);

根据已经建立的Socket来创建PrintWriter,将信息通过这个对象来发送给Server,其中包含了三个部分:

  • OutputStreamWriter
  • BufferedWriter
  • PrintWriter
1.PrintWriter out =newPrintWriter(newBufferedWriter(newOutputStreamWriter(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(); 02. 03.NetworkStream netStream = ConnectedClient.GetStream(); 04. 05.BinaryReader br =newBinaryReader(netStream); 06. 07.byte[] tempByte =newbyte[8192]; 08. 09.tempByte = br.ReadBytes(8192); 10. 11.stringRecevieString = 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 =newBinaryReader(netStream);

读取Stream中的byte array数据,转化为string字符串。

1.byte[] tempByte =newbyte[8192]; 2. 3.tempByte = br.ReadBytes(8192); 4. 5.stringRecevieString = System.Text.Encoding.Default.GetString(tempByte);

Android Client源代码:
这个Android Client所应用的方法与第一个例子中有很大区别,请各位特别注意(通过本人的反复验证,这个算是Java 与CSharp间可行的通讯方法)。

1.String message ="AndroidRes,Where is my Pig (Android)?"; 2.Socket socket =newSocket("192.168.0.149",51706); 3.OutputStream ops=socket.getOutputStream(); 4.DataOutputStream dos=newDataOutputStream(ops); 5.dos.write(message.getBytes()); 6.dos.close();

对上边的源代码做一些介绍:
同样是建立Socket对象。

1. Socket socket =newSocket("192.168.0.149",51706);

根据Socket对象创建OutputStream对象,根据名称可以很容易的理解这个对象的目的,它是建立一个输出的NetworkStream。

1. OutputStream ops=socket.getOutputStream();

DataOutputStream类似于BinaryWriter,是为OutputStream建立一个接口,可以通过这个接口向Socket另外一端写数据。

1. DataOutputStream dos=newDataOutputStream(ops);

最后这两行代码是实施写的过程。

1. dos.write(message.getBytes()); 2. dos.close();

以上就是本站为大家提供的两种Android与PC间通讯的方式(其中第一个方法来自Anddev.org,这里要特别指出)。如果你有更巧妙或者更方便的方法,希望能与大家共同分享!

更多相关文章

  1. linux和windows平台下,如何下载android sdk的源代码
  2. Android应用程序内部启动Activity过程(startActivity)的源代码分析
  3. pc 应用 通过 usb adb 与 android客户端通讯
  4. [hessdroid]Android下使用Hessian与Java服务端通讯
  5. android下变态的串口通讯
  6. Android源代码是这样搞到的(图解)
  7. android源代码在线查看
  8. Android StageFrightMediaScanner源代码解析
  9. 关于android UDP 客户端与delphi UDP服务端通讯中文乱码问题

随机推荐

  1. android 访问webservice问题
  2. java集合系列(11)TreeSet
  3. java多线程(5)多线程通信出现的假死现象分
  4. 这篇文章带你彻底理解synchronized关键字
  5. 聊聊java中NIO的增强版AIO
  6. 如果你现在的生活呆腻了,尝试着去改变一下
  7. java中的final关键字解析
  8. android与服务器交互方式
  9. 2021.1.15 ——运算符及关键字
  10. Android动态化方案