随笔-57  评论-202  文章-17  trackbacks-0
      下面是我的一个简单的网络服务器端的程序,程序的流程是监听ACCEPT事件,然后往客户端输出一串字符串。是不是很简单。

package sample.nio;

import java.io.
*;
import java.net.
*;
import java.nio.channels.
*;
import java.util.
*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author George Hill
 * @version 1.0
 
*/


public class Server {

  
private int port;

  
public Server(int port) {
    
this.port = port;
  }


  
public void startServer() throws IOException {
    
// 创建ServerSocketChannel并且绑定到指定的端口
    ServerSocketChannel ssc = ServerSocketChannel.open();
    InetSocketAddress address 
= new InetSocketAddress(InetAddress.getLocalHost(), port);
    ssc.socket().bind(address);
    ssc.configureBlocking(
false);

    
// 创建Selector,并且注册ACCEPT事件
    Selector selector = Selector.open();
    SelectionKey skey 
= ssc.register(selector, SelectionKey.OP_ACCEPT);

    boolean stop 
= false;
    
int n = 0;

    System.
out.println("Server Start");

    
// 轮询
    while (!stop) {
      
// 获取Selector返回的时间值
      n = selector.select();

      
// 当传回的值大于0事,读时间发生了
      if (n > 0{
        Set 
set = selector.selectedKeys();
        Iterator it 
= set.iterator();

        
while (it.hasNext()) {
          skey 
= (SelectionKey) it.next();
          it.remove();

          
if (skey.isAcceptable()) {
            
// 从channel()中取得刚刚注册的Channel
            Socket socket = ((ServerSocketChannel) skey.channel()).accept().socket();

            PrintWriter writer 
= new PrintWriter(socket.getOutputStream(), true);

            
// 将"Hello, World"写入
            writer.write("Hello, World!\n");

            
// 睡眠3秒
            try {
              Thread.sleep(
3000);
            }
 catch (InterruptedException ie) {
            }


            
// 将"EXIT"写入Buffer
            writer.write("EXIT");

            
// 退出程序
            writer.close();
            
// stop = true;
          }

        }

      }

    }


    ssc.close();
    System.
out.println("Server Stop");
  }


  
public static void main(String[] args) throws Exception {
    Server server 
= new Server(5000);
    server.startServer();
  }

}

posted on 2005-05-18 12:21 小米 阅读(713) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: