About the Third Edition
In 1996, in the first chapter of the first edition of this book, I
wrote extensively about the sort of dynamic, distributed network
applications I thought Java would make possible. One of the most
exciting parts of writing subsequent editions has been seeing
virtually all of the applications I foretold come to pass.
Programmers are using Java to query database servers, monitor web
pages, control telescopes, manage multiplayer games, and more, all by
using Java's native ability to access the Internet.
Java in general and network programming in Java in particular has
moved well beyond the hype stage and into the realm of real, working
applications. Not all network software is yet written in Java, but
it's not for a lack of trying. Efforts are well
under way to subvert the existing infrastructure of C-based network
clients and servers with pure Java replacements. Clients for newer
protocols like Gnutella and Freenet are preferentially written in
Java. It's unlikely that Java will replace C for all
network programming in the near future. However, the mere fact that
many people are willing to use web browsers, web servers, and more
written in Java shows just how far we've come since
1996.
This book has come a long way, too. The third edition has one
completely new chapter to describe the most significant development
in network programming since readers and writers were introduced in
Java 1.1. I refer of course to the new I/O APIs in the
java.nio package. The ability to perform
asynchronous, non-blocking I/O operations is critical for
high-performance network applications, especially servers. It removes
one of the last barriers to using Java for network servers. Many
other chapters have been updated to take advantage of these new I/O
APIs.
There've been lots of other small changes and
updates throughout the java.net and supporting
packages in Java 1.4 and 1.5, and these are covered here as well. New
classes addressed in this edition include
CookieHandler, SocketAddress,
Proxy, NetworkInterface, and
URI. IPv6 has become a reality, and is now covered
extensively. Many other methods have been added to existing classes
in the last two releases of Java, and these are discussed in the
relevant chapters. I've also rewritten large parts
of the book to reflect changing fashions in Java programming in
general and network programming in particular. Applets and CGI
programs are emphasized much less. In their place,
you'll find more generic discussion of remote code
execution and server-side environments, however implemented.
Of course, the text has been cleaned up, too.
There's only one completely new chapter here, but
the 18 existing chapters have been extensively rewritten and expanded
to bring them up-to-date with new developments as well as to make
them clearer and more engaging. I hope you'll find
this third edition an even stronger, longer-lived, more accurate, and
more enjoyable tutorial and reference to network programming in Java
than the last edition.