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
 
Search WWH ::




Custom Search