七、建立TCP服务器程序
网络编程的最有趣的部分之一是编写网络服务器。客户端发送请求并响应发回来的数据,但是服务器执行大多数真正的工作。下面的例子是一个daytime(日期时间)服务器(你可以使用上面描述的客户端测试它)。
DaytimeServer的代码
DaytimeServer是如何工作的
这是最简单的服务器程序了。这个服务器程序的第一步是建立一个ServerSocket。如果端口已经绑定了,将会产生一个BindException异常,因为两个服务器程序不可能共享相同的端口。否则,就建立了服务器套接字。下一步是等待连接。
因为daytime是个非常简单的协议,并且我们的第一个TCP服务器程序示例必须很简单,所以我们此处使用了单线程服务器程序。在简单的TCP服务器程序中通常使用无限运行的for循环,或者使用表达式的值一直为true的While循环。在这个循环中,第一行是server.accept()方法,它会阻塞代码运行直到某个客户端试图连接为止。这个方法返回一个表示某个客户端的连接的套接字。为了记录数据,该连接的IP地址和端口号被发送到System.out。你将看到每次某个人登陆进来并获取某天的时间。
Daytime是一个仅作应答(response-only)的协议,因此我们不需要担心对任何输入信息的读取过程。我们获得了一个OutputStream(输出流),接着把它包装进PrintStream(打印流),使它工作更简单。我们在使用java.util.Date类决定日期和时间后,基于TCP流把它发送给客户端。最后,我们清除了打印流中的所有数据并通过在套接字上调用close()关闭该连接。
运行DaytimeServer
运行该服务器程序是很简单的。该服务器程序没有命令行参数。如果这个服务器程序示例需要运行在UNIX上,你需要把变量SERVICE_PORT的值该为1024,除非你关闭默认的daytime进程并作为root运行这个示例。在Windows或其它操作系统上,就没有这个问题。如果需要在本机上运行该服务器程序,需要使用下面的命令:
java DaytimeServer
|