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,其中包含了三个部分:
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()); |
此片为转载