Android-49-使用ServerSocket创设服务器端

Android---49---使用ServerSocket创建服务器端


使用ServerSocket创建服务器端:


Java中能够接受其他通信实体连接请求的是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接。

如果没有连接,它将一直处于等待状态。




ServerSocket构造方法:

 

构造方法摘要

ServerSocket() 
          创建非绑定服务器套接字。

 

ServerSocket(int port) 
          创建绑定到特定端口的服务器套接字。

 

ServerSocket(int port, int backlog) 
          利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。

 

ServerSocket(int port, int backlog, InetAddress bindAddr) 
          使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

 

 

参数 port 指定服务器要绑定的端口( 服务器要监听的端口), 参数 backlog 指定客户连接请求队列的长度, 参数 bindAddr 指定服务器要绑定的IP 地址.

 

绑定端口:ServerSocket(int port) 

 

ServerSocket ss = new ServerSocket(30005);

创建一个与30005端口绑定的服务器,如果运行时无法绑定到该端口,会抛出异常,原因可能是该端口已经被其他服务器进程占用。

 

设定客户连接请求队列的长度:backlog

 

许多操作系统限定了队列的最大长度,一般为50.当队列中的连接请求达到了队列的最大容量时,服务器进程所在的主机会拒绝新的连接请求

只有当服务器进程通过ServerSocket的accept方法从队列中取出连接请求,使队列腾出空位时,队列才能继续加入新的连接请求

ServerSocket构造方法中backlog参数是用来设置连接请求队列的长度的,但是在以下几种情况下,仍然会采用操作系统限定的队列的最大长度:

backlog参数的值大于操作系统限定的队列的最大值

backlog参数的值小于或等于0

在Serversocket构造方法中没有使用backlog

 

 

接收和关闭与客户端的连接:

接收:ServerSocket的accept()

关闭:close()

 

创建ServerSocket的步骤

1.实例化一个指定端口的ServerSocket;

2.调用ServerSocket的accept()方法;

3.获得通过Socket得到的输入输出流;

4.读取和写入到Socket;

5.关闭流。



public static void main(String[] args) throws IOException {
		// 创建一个ServerSocket,用于监听客户端Socket的连接请求
		ServerSocket ss = new ServerSocket(30005);
		// 采用循环不断接受来自客户端的请求
		while (true) {
			// 每当接收到一个请求,服务器端也会产生一个对应的Socket
			Socket s = ss.accept();

			OutputStream os = s.getOutputStream();
			os.write("你好".getBytes("utf-8"));
			// 关闭
			os.close();
			s.close();
		}
	}