收藏 (0) +1 (0) +1 (0) +1
收藏成功查看收藏>>

正在阅读:Java进阶学习:网络服务器编程Java进阶学习:网络服务器编程

2004-11-10 15:24 出处:CSDN 作者:DaiJiaLin 责任编辑:linjixiong


  try {

  try {

  InputStream input = _sock.getInputStream();

  OutputStream output = _sock.getOutputStream();

  byte [] buf = new byte [128];            

  while (true) {

  int count = input.read(buf);

  if (count == -1)

  break;

  output.write(buf, 0 , count);

  }

  } finally {

  _sock.close();

  }

  } catch (IOException ex) {

  throw new ExceptionAdapter(ex);   

  }

  }

  protected Socket _sock = null;

  }

  EchoSession接受一个Socket对象作为构造参数,在其run()方法中,它不停的从这个Socket对象的InputStream里面读数据并写回到该Socket的OutputStream中去,直到这个连接被客户端关闭为止(InputStream的read方法返回-1)。

  EchoSession需要一个线程来执行,这容易让人联想到用Thread来作为EchoSession的父类。不过,这样做不够灵活,开销也比较大。而选择让EchoSession实现Runnable接口就灵活得多。在接下来的使用Thread Pool的Echo Server中可以看到这一点。

  以上已经是一个完整的TCP Echo Server,不过随着客户不停的连接和断开,这个服务器会不停的产生和消除线程,而这两个都是比较‘昂贵’的操作。为了避免这种消耗,可以考虑采用Thread Pool的机制。

  使用在一个简单的Thread缓冲池的实现一文中Thread Pool的实现,可以对EchoServer作如下修改(EchoSession无需做修改):


  public class EchoServer implements Runnable {

  public void run() {

  try {

  ServerSocket svr = new ServerSocket(7);


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
手机访问回到顶部