各位看官们,大家好,上一回中咱们说的是Android中网络通信之TCP概述的例子,这一回中咱们说的例子是网络通信之TCP服务端。闲话休提,言归正转。让我们一起Talk Android吧!

我们在上一章中已经明白了TCP通信的流程,本章回中主要介绍TCP服务端的接口,当然了这些接口是基于JDK的,主要是java.net.*中的内容。

服务器初始化

服务端提供了ServerSocket类表示服务器,通过构造方法可以创建服务器对象,也可以理解为对服务器进行了初始化操作。该类一共有四种构造方法,具体如下:

ServerSocket()
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress bindAddr)

构造方法中通过参数port和bindAddr来绑定服务器端口和地址,还有一个参数backlog表示队列长度,也就是服务器可以接受的请求数量。

客户端发起的请求会依次加入到队列中,服务器不能接受无限次的请求,因此通过参数来指定队列长度,通常情况下操作系统也会有一个默认的队列长度,一般是50.如果此参数值为0或者超过操作系统的默认值就会使用操作系统的默认值。

关于端口号的数字范围为0-65535.其中0-1023留作系统使用,其它可以自由使用。如果使用0表示让系统自动分配可用的端口给服务器上的应用程序。

参数中的地址是服务器的地址,默认使用当前系统的地址,如果指定了特定的地址就使用特定的地址,否则使用默认地址。

绑定端口

void  bind(SocketAddress endpoint)
void  bind(SocketAddress endpoint, int backlog)

该方法用来绑定端口,也可以在创建对象时通过参数来绑定端口,如果在构造方法中指定了端口,那么会自动绑定,而不需要此方法去绑定(注意不要重复操作)。

有时需要修改服务器的参数时可以使用不带参数的构造方法创建服务器对象,然后修改服务器的配置,最后再来绑定端口。服务器的配置包含连接请求时的超时时间,数据的缓冲区大小等,这里先不做详细的介绍。

监听请求

Socket  accept()

该方法用来监听客户端发来的请求,它会从请求连接的队列中获取一个请求进行连接,连接成功返回一个Socket类的对象,该对象表示客户端发来的连接请求,我们在后面章回再详细介绍;

注意该方法是一个阻塞方法,这表示只有它和一个请求建立连接后才会和下一个请求建立连接,否则它会一起处于阻塞状态。

关闭连接

boolean isClosed()

该方法获取当前服务器的连接是否关闭。通信结束后需要及时关闭连接,不会浪费资源,在关闭连接前可以使用此方法来判断连接是否关闭。

void  close()

该方法用来关闭连接,在关闭连接前需要释放各种资源,以免造成内存泄漏。

本章总结

最后让我们对本章回的内容做一个总结:

  • 1.Java中使用ServerSocket类表示服务器,通过该类的构造方法可以创建服务器对象;
  • 2.绑定端口可以在构造方法中进行,或者使用bind()方法,二者选一就可以,不要重复绑定端口;
  • 3.TCP通信结束后需要断开连接,使用isClosed()方法和close()方法来完成此工作;

看官们,关于Android中网络通信之TCP服务端的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!