The port scanner pretty much exhausts what you can do with just the
constructors. Almost all ServerSocket
objects you
create will use their accept()
method to connect to a
client.
public Socket accept() throws IOException
There are no getInputStream()
or
getOutputStream()
methods for ServerSocket. Instead you use
accept()
to return a Socket object, and then call its
getInputStream()
or getOutputStream()
methods.
For example,
try {
ServerSocket ss = new ServerSocket(2345);
Socket s = ss.accept();
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("Hello There!");
pw.println("Goodbye now.);
s.close();
}
catch (IOException ex) {
System.err.println(ex);
}
Notice in this example, I closed the Socket s
, not the
ServerSocket ss
. ss
is still bound to
port 2345. You get a new socket for each connection but it's easy
to reuse the server socket. For example, the next code fragment
repeatedly accepts connections:
try {
ServerSocket ss = new ServerSocket(2345);
while (true) {
Socket s = ss.accept();
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("Hello There!");
pw.println("Goodbye now.);
s.close();
}
}
catch (IOException ex) {
System.err.println(ex);
}