Android作为Socket服务器端技术上其实没什么好说的,Java有ServerSocket包,直接就能够实现服务器端编程,一般作为Java语言Socket编程典型实例和客户端编程在一起讲的。

但是,在Android开发中,很少将Android作为Socket服务器端。其中原因是:作为服务器端的一般条件是拥有固定的IP,然后客户端再根据服务器的IP和端口号连上服务器,但是,一般Android设备无线上网的IP都是运营商分配的,不是静态IP。换句话说,如果运营商给你的平板电脑分配了一个固定的IP,那么Android作为服务器端并且通过路由器连上外网之后那Internet上任何设备都有途径找到你的平板电脑了。

那么Android作为服务器端就没有意义了吗?显然不是。IP不能固定只是针对广域网来说的,但是在局域网中,Android作为服务器还是有很大作用的。服务器可以连接多个客户端,在局域网中形成一个一对多的网络,这在传感网络、监控系统等方面很大的应用空间。其实,在局域网中一对一的Socket编程Server-Client模型中,客户端和服务器端并没有本质上的区别,反正数据收发都是相互的。关键就在于服务器端对多个客户端的情况。比如设计一种Android设备作为局域网服务器端的例子,网络内还有多个客户端,比如多个来自传感器或者其他设备的无线数据,则一台Android设备就能作为监控网络的中心进行全面监控。反过来另一种情况,如果Android作为客户端,则可以有多台分散Android设备,运行同一个程序,同时监控一个服务器的信息,比如一个工作站的工作情况,医院一台监视病人状态的监护仪器上的数据。

我觉得之所以Android设备作为客户端的例子较多,因为现有Android大多具有便携性和移动性,更加适合上述的第二种情况。而且Android作为客户端可以连接不同的服务器,但是作为服务器就被动了。

另外Android设备要设置固定IP很简单,在WiFi设置中点菜单进入高级设置,就能设置静态IP,在局域网中需要与路由在同一段网关内。

今天我也学到一点,不管手头在做多么细节的事,一定要有全局观念和长远规划。比如最近在往一个Android应用中加局域网的网络功能,其实Android作为客户端还是服务器端都是可行的,甚至不通过路由器,Android系统与下位机直连也是可行的,但是真正好的设计不在于仅仅实现目前的功能,还在于考虑今后的发展和整个系统的架构。正如上面所说,作为客户端和服务器是两种完全不同的网络架构,必须考虑到这一点。本人是网络编程菜鸟,如有错谬欢迎指正。

 posted on 2013-03-14 00:28  Ginsan  阅读(2539)  评论(0编辑  收藏  举报