1. Android与PC通讯的第一个例子:
- PC: Java Server
- Android:Java Client
Java Server 源代码:
01 | public class TCPDesktopServer implements Runnable{ |
03 |
public static final String SERVERIP = "192.168.0.149" ; |
04 |
public static final int SERVERPORT = 51706 ; |
08 |
System.out.println( "S: Connecting..." ); |
10 |
ServerSocket serverSocket = new ServerSocket(SERVERPORT); |
13 |
Socket client = serverSocket.accept(); |
14 |
System.out.println( "S: Receiving..." ); |
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" ); |
25 |
System.out.println( "S: Done." ); |
30 |
} catch (Exception e) { |
31 |
System.out.println( "S: Error" ); |
36 |
public static void main (String a[]) { |
37 |
Thread desktopServerThread = new Thread( new TCPDesktopServer()); |
38 |
desktopServerThread.start(); |
对上边的源代码做一些介绍:
指定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" ); |
02 | Log.d( "TCP" , "C: Connecting..." ); |
03 | Socket socket = new Socket(serverAddr, 51706 ); |
04 | String message = "AndroidRes,Where is my Pig (Android)?" ; |
06 |
Log.d( "TCP" , "C: Sending: '" + message + "'" ); |
07 |
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true ); |
09 | } catch (Exception e) { |
10 |
Log.e( "TCP" , "S: Error" , e); |
对上边的源代码做一些介绍:
指定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(); |
03 | NetworkStream netStream = ConnectedClient.GetStream(); |
05 | BinaryReader br = new BinaryReader(netStream); |
07 | byte [] tempByte = new byte [8192]; |
09 | tempByte = br.ReadBytes(8192); |
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]; |
3 | tempByte = br.ReadBytes(8192); |
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()); |
对上边的源代码做一些介绍:
同样是建立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()); |
此片为转载
- android 网络请求方式 例子
- Android中,把XML文件转换成Object对象的方法
- Android应用程序绑定服务(bindService)的过程源代码分析(2)
- 初学Android,五大布局对象(六)
- android发送短信例子
- Android 上层界面到内核代码的完整的流程分析,以alarm为例子
- Android中intent传递对象和Bundle的用法
随机推荐
-
史上最全的android开源项目框架大全
-
Android中的资源与国际化!
-
android 工程中重新生成gen文件夹或R.jav
-
工(程师)欲善其事,必先利其(编译)器——《Andr
-
Android快速调试方法
-
Android开发---从简单的TextView看Androi
-
Android应用程序进程启动过程的源代码分
-
Android(安卓)应用(中英文)切换
-
Android(安卓)Binder之native层解析
-
Android高级开发第三讲--应用程序基础