Java Reference
In-Depth Information
CHAPTER 9
Sockets for Servers
The previous chapter discussed sockets from the standpoint of
clients
: programs that
open a socket to a server that's listening for connections. However, client sockets them‐
selves aren't enough; clients aren't much use unless they can talk to a server, and the
Socket
class discussed in the previous chapter is not sufficient for writing servers. To
create a
Socket
, you need to know the Internet host to which you want to connect.
When you're writing a server, you don't know in advance who will contact you; and even
if you did, you wouldn't know when that host wanted to contact you. In other words,
servers are like receptionists who sit by the phone and wait for incoming calls. They
don't know who will call or when, only that when the phone rings, they have to pick it
up and talk to whoever is there. You can't program that behavior with the
Socket
class
alone.
For servers that accept connections, Java provides a
ServerSocket
class that represents
server sockets. In essence, a server socket's job is to sit by the phone and wait for in‐
coming calls. More technically, a server socket runs on the server and listens for in‐
coming TCP connections. Each server socket listens on a particular port on the server
machine. When a client on a remote host attempts to connect to that port, the server
wakes up, negotiates the connection between the client and the server, and returns a
regular
Socket
object representing the socket between the two hosts. In other words,
server sockets wait for connections while client sockets initiate connections. Once a
ServerSocket
has set up the connection, the server uses a regular
Socket
object to send
data to the client. Data always travels over the regular socket.
Using ServerSockets
The
ServerSocket
class contains everything needed to write servers in Java. It has con‐
structors that create new
ServerSocket
objects, methods that listen for connections on