使用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(); } }