Origin:http://tutorials.jenkov.com/java-networking/server-sockets.html
主要内容:
- 创建一个ServerSocket
- 监听将至的连接(incoming connection)
- 关闭客户端Sockets
- 关闭服务器端Sockets
为了实现一个Java的服务器——该服务器一直在监听随时都可能到来的客户端的TCP/IP连接,你需要使用java.net.ServerSocket这个类。如果相较于Java网络API,你更喜欢用Java NIO,你可以用ServerSocketChannel代替java.net.ServerSocket。
创建一个ServerSocket
下面是一条简单的代码,用来创建一个监听着9000端口的ServerSocket:
ServerSocket serverSocket = new ServerSocket(9000);
监听将至的连接
为了接受将至的连接,你必须调用ServerSocket的accept()方法,这个方法返回一个Socket类型的值,这种方式类似Java Socket方式。下面就是说明代码:
ServerSocket serverSocket = new ServerSocket(90000; boolean isStopped = false; while(!isStopped){ <span style="white-space:pre"> </span>Socket clientSocket = serverSocket.accept(); <span style="white-space:pre"> </span>//do sth here }
只有当连接被accept()接受到,连接才算打开了。也就是说,只有当线程执行到服务器调用了accept()方法之后,将至的连接才能被接受,所有除accept()以外的线程执行时间都白费,没有客户端可以连接到。因此“接受”线程通常把将至的连接传递到“工人”线程池(worker threads),这些“工人”线程然后会与客户端通信。更多关于Java多线程服务器的设计,可以参看Java
Multithread Servers。
关闭客户端Sockets
一旦客户端的请求结束了,再没有请求了,你必须关闭Socket,正像你关闭一个普通的客户端Socket。调用close()方法:
socket.close();
关闭服务器端Sockets
服务器端的话,你需要关闭ServerSocket,调用close()方法:
serverSocket.close();