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

  • PC: Java Server
  • Android:Java Client

Java Server 源代码:

01 public class TCPDesktopServer implements Runnable{
02
03 public static final String SERVERIP = "192.168.0.149";
04 public static final int SERVERPORT = 51706;
05
06 public void run() {
07 try {
08 System.out.println("S: Connecting...");
09
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();
02
03 NetworkStream netStream = ConnectedClient.GetStream();
04
05 BinaryReader br = new BinaryReader(netStream);
06
07 byte[] tempByte = new byte[8192];
08
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();

此片为转载

更多相关文章

  1. android 网络请求方式 例子
  2. Android中,把XML文件转换成Object对象的方法
  3. Android应用程序绑定服务(bindService)的过程源代码分析(2)
  4. 初学Android,五大布局对象(六)
  5. android发送短信例子
  6. Android 上层界面到内核代码的完整的流程分析,以alarm为例子
  7. Android中intent传递对象和Bundle的用法

随机推荐

  1. 史上最全的android开源项目框架大全
  2. Android中的资源与国际化!
  3. android 工程中重新生成gen文件夹或R.jav
  4. 工(程师)欲善其事,必先利其(编译)器——《Andr
  5. Android快速调试方法
  6. Android开发---从简单的TextView看Androi
  7. Android应用程序进程启动过程的源代码分
  8. Android(安卓)应用(中英文)切换
  9. Android(安卓)Binder之native层解析
  10. Android高级开发第三讲--应用程序基础