隨筆-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 小米 閱讀(731) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 上栗县| 新泰市| 特克斯县| 琼海市| 慈溪市| 岚皋县| 洪江市| 侯马市| 永登县| 诸暨市| 绥宁县| 丹寨县| 彰武县| 孝昌县| 涟源市| 灵璧县| 建湖县| 康保县| 林周县| 资溪县| 静宁县| 惠水县| 河南省| 河东区| 阿图什市| 介休市| 开阳县| 库伦旗| 枣阳市| 北票市| 开封县| 扶绥县| 特克斯县| 太康县| 西宁市| 富锦市| 南充市| 鄯善县| 卢龙县| 南通市| 景宁|