接触过socket很多次了,但始终不太理解socket的网络传输机制。今天专门在网上查找了一下关于socket的android前后台的简单通信,http://blog.csdn.net/ameyume/article/details/8146143,这篇博客书写规范,注释清晰,关于socket讲得很透彻。
客户端:s=new socket(ip,port);
读消息:
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream));//运用BufferedReader和InputStreamReader估计是为了提高读取效率
message=br.readLine();
发消息:
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamReader(s.getOutputStream),true));//关于PrintWriter与BufferedWriter的区别请http: //computerhenu.iteye.com/blog/1745617
out.println(message);
out.flush();
服务器端:ss=new ServerSocket(port);
while(true){//服务器端一直在运行等待客户端发送socket,对于一个新的socket,服务器则建立一个新的socket.
Socket s=ss.accept();
读消息:与客户端完全相同
发消息:与客户端程序完全相同
}
总结:在一般的网络运用中,socket已经是最底层的网络接口,在一般的库中,比如C,JAVA,C#语言库中都是通过socket来进行网络进程通信。但如果要弄清楚socket,建议还是看下socket的具体代码。由上面分析可知,服务器和客户端一旦建立网络连接后就处于对等的地位。只不过服务器端有一个公开的号码(ip),它需要不断监听,被动等待响应客户端的请求。
------------------------------------------------------------2015.4.9补充---------------------------------------------
前面测试是在局域网下测试的。具体是在PC机开了一个热点,手机连接上去,相当PC机就是一个小局域网的结点。而如果测试环境没有局域网,那就利用另外一种USB通信方式,据说要用到ADB.还可以利用模拟器和PC机之间的通信。
http://blog.sina.com.cn/s/blog_8a86f4dd01010nul.html这个帖子是讲android模拟器当客户端,电脑当服务器使用的,经过测试没有问题。注意IP一定为android的固定通信ip--10.0.2.2.
也可以利用android客户端当服务器,pc机器当客户端通信,也可以通过多个模拟器之间进行通信,但需要窗口重定向。http://warnerhit.iteye.com/blog/1415793这个帖子有讲到,但是没有测试过。