Java Networking: ServerSocket
Jakob Jenkov |
In order to implement a Java server that listens for incoming connections from clients via TCP/IP,
you need to use a java.net.ServerSocket
. In case you prefer to use Java NIO instead
of Java Networking (standard API), then you can also use a ServerSocketChannel
instead of the java.net.ServerSocket
.
Creating a ServerSocket
Here is a simple code example that creates a ServerSocket
that listens on port 9000:
ServerSocket serverSocket = new ServerSocket(9000);
Listening For Incoming Connections
In order to accept incoming connections you must call the ServerSocket.accept()
method. The accept()
method returns a Socket
which behaves like
an ordinary Java Socket. Here is how that looks:
ServerSocket serverSocket = new ServerSocket(9000); boolean isStopped = false; while(!isStopped){ Socket clientSocket = serverSocket.accept(); //do something with clientSocket }
Only one incoming connection is opened for each call to the accept()
method.
Additionally, incoming connections can only be accepted while the thread running the server
has called accept()
. All the time the thread is executing outside of this method
no clients can connect. Therefore the "accepting" thread normally passes incoming connections
(Socket's) on to a pool of worker threads, who then communicate with the client. See
the tutorial trail Java Multithreaded Servers
for more information on multithreaded server design.
Closing Client Sockets
Once a client request is finished, and no further requests will be received from that client,
you must close that Socket
, just like you would close a normal client Socket
.
This is done by calling:
socket.close();
Closing Server Sockets
Once the server is to shut down you need to close the ServerSocket
. This is done by
calling:
serverSocket.close();
Tweet | |
Jakob Jenkov |