,Java   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,Java
您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
Java网络编程之传输控制协议(三)
[文章信息]
作者:陶刚编译
时间:2003-09-30
出处:yesky
责任编辑:方舟
[文章导读]
讨论了套接字类的功能后,本文分析了一个完整的TCP客户端程序
advertisement
热点推荐
· 深入探讨SQL Server 2000对XML的支持
· Swing(空)
· 3DS Stodio Max 宝典
· 中小企业服务器配置方案--前 言
· 中小企业服务器配置方案--代理接入服务器(3)
[正文]

上一页  1 2 3 4 5  下一页

  七、建立TCP服务器程序

  网络编程的最有趣的部分之一是编写网络服务器。客户端发送请求并响应发回来的数据,但是服务器执行大多数真正的工作。下面的例子是一个daytime(日期时间)服务器(你可以使用上面描述的客户端测试它)。

  DaytimeServer的代码

import java.net.*;
import java.io.*;

public class DaytimeServer
{
public static final int SERVICE_PORT = 13;

public static void main(String args[])
{
try
{
// 绑定到服务端口,给客户端授予访问TCP daytime服务的权限
ServerSocket server = new ServerSocket
(SERVICE_PORT);

System.out.println ("Daytime service started");

// 无限循环,接受客户端
for (;;)
{
// 获取下一个TCP客户端
Socket nextClient = server.accept();

// 显示连接细节
System.out.println ("Received request from " +
nextClient.getInetAddress() + ":" +
nextClient.getPort() );

// 不读取数据,只是向消息写信息
OutputStream out =
nextClient.getOutputStream();
PrintStream pout = new PrintStream (out);

// 把当前数据显示给用户
pout.print( new java.util.Date() );

// 清除未发送的字节
out.flush();

// 关闭流
out.close();

// 关闭连接
nextClient.close();
}
}
catch (BindException be)
{
System.err.println ("Service already running on port " + SERVICE_PORT );
}
catch (IOException ioe)
{
System.err.println ("I/O error - " + ioe);
}
}
}

  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


上一页  1 2 3 4 5  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,Java相关内容,Java焦点新闻
  • Java 理论与实践:哈希
  • DB2 J2EE开发成本收益分析(二)
  • DB2 J2EE开发成本收益分析(一)
  • Java多重提交处理分析
  • Java利器Jakarta Commons(一)
  • 在Web Services中管理Sessions
  • 在ColdFusion和J2EE之间共享数据
  • Java网络编程之传输控制协议(二)
  • Java打印程序设计
  • 数据库连接池Java实现小结
  • Java网络编程之传输控制协议(一)
  • 用Java动态代理类实现记忆功能
  • Servlet容器工作原理
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,JavaAdvertisement