夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          package org.upeng.mail.net.server;

          import java.io.BufferedReader;
          import java.io.BufferedWriter;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.io.OutputStreamWriter;
          import java.net.Socket;

          import org.upeng.mail.net.util.AESUtil;
          import org.upeng.mail.net.util.NetConfit;
          import org.upeng.mail.net.util.NetLoger;
          import org.upeng.mail.process.InstructionProcessor;

          /**
           * <ul>
           * <li>Title:[服務器處理類]</li>
           * <li>Description: [type of functional description]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-9-5]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * @version 1.0
           
          */

          public class ServerHandler implements Runnable
          {
              
          /** SOCKET */
              private Socket socket;
              
              
          /** 緩沖寫入 */
              private BufferedWriter bw;
              
              
          /** 緩沖讀入 */
              private BufferedReader br;
              
              
          /** 指令處理緩存 */
              private InstructionProcessor processor;
              
              
          /**
               * <ul>
               * <li>Description:[構造方法]</li>
               * <ul>
               * 
               * @param socket
               
          */

              
          public ServerHandler(Socket socket)
              {
                  this.socket 
          = socket;
                  processor 
          = new InstructionProcessor();
              }
              
              
          public void run()
              {
                  try
                  {
                      
          // 創(chuàng)建緩沖讀寫
                      br 
          = new BufferedReader(new InputStreamReader(socket
                              .getInputStream()));
                      bw 
          = new BufferedWriter(new OutputStreamWriter(socket
                              .getOutputStream()));
                      
                      
          // 客戶端發(fā)來的消息
                      String msg 
          = null;
                      
          while (true)
                      {
                          msg 
          = readLine();
                          
                          
          // 這里是遠程商品,發(fā)向遠程
                          processor.process(getRemoteIp(), msg);
                          write(NetConfit.tcp_oparator_success);
                      }
                      
                  }
                  catch (IOException e)
                  {
                      e.printStackTrace();
                  }
                  finally
                  {
                      freeSource();
                  }
              }
              
              
          /**
               * <ul>
               * <li>Description:[寫數(shù)據(jù)]</li>
               * <li>Created by [Huyvanpull] [2011-9-5]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * @param msg
               * @throws IOException
               
          */

              private void write(String msg) throws IOException
              {
                  
          // 判斷寫入的消息是否合法
                  
          if (msg == null || "".equals(msg))
                  {
                      
          return;
                  }
                  
                  
          // 處理消息,加上部首, 且加密數(shù)據(jù),防止非法者抓包
                  String encodeMsg 
          = NetConfit.tcp_msg_head + msg;
                  encodeMsg 
          = AESUtil.encrypt(encodeMsg, NetConfit.password);
                  
                  
          // 寫數(shù)據(jù)
                  bw.write(encodeMsg);
                  bw.newLine();
                  bw.flush();
                  
                  
          // 記錄日志
                  NetLoger.logSnd(getRemoteIp(), socket.getPort(), msg);
              }
              
              
          /**
               * <ul>
               * <li>Description:[讀數(shù)據(jù)]</li>
               * <li>Created by [Huyvanpull] [2011-9-5]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * @return
               * @throws IOException
               
          */

              private String readLine() throws IOException
              {
                  String decodeMsg 
          = "";
                  
          // 讀取一行數(shù)據(jù),并判斷數(shù)據(jù)是否非法
                  String endcodeMsg 
          = br.readLine();
                  
          if (endcodeMsg == null || "".equals(endcodeMsg))
                  {
                      
          return decodeMsg;
                  }
                  
                  
          // 解密數(shù)據(jù),并判斷數(shù)據(jù)是否是合法的
                  decodeMsg 
          = AESUtil.decrypt(endcodeMsg, NetConfit.password);
                  
                  
          if (decodeMsg.length() < 5
                          
          || !NetConfit.tcp_msg_head.equals(decodeMsg.substring(04)))
                  {
                      
          // 如果消息不合法
                      
          return "";
                  }
                  
          else
                  {
                      decodeMsg 
          = decodeMsg.substring(4);
                  }
                  
                  
          // 寫入日志
                  NetLoger.logRsv(getRemoteIp(), socket.getPort(), decodeMsg);
                  
                  
          // 返回結果
                  
          return decodeMsg;
              }
              
              
          /**
               * <ul>
               * <li>Description:[得到遠程IP]</li>
               * <li>Created by [Huyvanpull] [2011-9-7]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * @return
               
          */

              private String getRemoteIp()
              {
                  
          return socket.getInetAddress().getHostAddress().toString();
              }
              
              
          /**
               * <ul>
               * <li>Description:[釋放資源]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              private void freeSource()
              {
                  try
                  {
                      
          // 釋放BufferWriter
                      
          if (bw != null)
                      {
                          bw.
          close();
                      }
                  }
                  catch (Exception ex)
                  {
                      ex.printStackTrace();
                  }
                  
                  try
                  {
                      
          // 釋放BufferReader
                      
          if (br != null)
                      {
                          br.
          close();
                      }
                  }
                  catch (Exception ex)
                  {
                      ex.printStackTrace();
                  }
                  
                  try
                  {
                      
          // 釋放Socket
                      
          if (socket != null)
                      {
                          socket.
          close();
                      }
                  }
                  catch (Exception ex)
                  {
                      ex.printStackTrace();
                  }
              }
          }
          2.
          package org.upeng.mail.net.server;

          import java.io.IOException;
          import java.net.ServerSocket;
          import java.net.Socket;
          import java.net.SocketTimeoutException;
          import java.util.concurrent.ExecutorService;
          import java.util.concurrent.Executors;

          import org.upeng.mail.net.util.NetConfit;
          import org.upeng.mail.net.util.NetLoger;

          /**
           * <ul>
           * <li>Title:[TCPServer]</li>
           * <li>Description: [TCP網(wǎng)絡服務]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-9-6]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public class TCPServer extends Thread
          {
              
          /** TCP服務器實例 */
              
          private static TCPServer tcpServer = new TCPServer();
              
              
          /** server socket */
              
          private ServerSocket serverSocket;
              
              
          private ExecutorService executorService;
              
              
          /** 端口號 */
              
          private int port;
              
              
          /** 是否啟動成功(如端口已經(jīng)被占用,就不能啟動成功) */
              
          private boolean isStoped = false;
              
              
          /**
               * <ul>
               * <li>Description:[構造方法]</li>
               * <ul>
               
          */

              
          private TCPServer()
              
          {
                  startServer();
              }

              
              
          /**
               * <ul>
               * <li>Description:[得到單態(tài)的實例]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @return
               
          */

              
          public static TCPServer getInstance()
              
          {
                  
          return tcpServer;
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see java.lang.Thread#run()
               
          */

              
          public void run()
              
          {
                  
          this.service();
              }

              
              
          /**
               * <ul>
               * <li>Description:[服務]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          private void service()
              
          {
                  
          // 測試信息
                  StringBuffer debugInfo = new StringBuffer();
                  
          while (!isStoped)
                  
          {
                      Socket socket 
          = null;
                      
          try
                      
          {
                          
          // 等等連接
                          socket = serverSocket.accept();
                          
                          
          // 測試信息
                          debugInfo.delete(0, debugInfo.length());
                          debugInfo.append(
          "服務器與");
                          debugInfo.append(socket.getRemoteSocketAddress().toString());
                          debugInfo.append(
          "建立連接");
                          NetLoger.log(debugInfo.toString());
                          
                          
          // 服務器處理線程
                          executorService.execute(new ServerHandler(socket));
                      }

                      
          catch (SocketTimeoutException stex)
                      
          {}
                      
          catch (Exception e)
                      
          {
                          e.printStackTrace();
                      }

                  }

              }

              
              
          /**
               * <ul>
               * <li>Description:[服務器是否啟動成功]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
               * 
          @return
               
          */

              
          public boolean isStopeded()
              
          {
                  
          return isStoped;
              }

              
              
          /**
               * <ul>
               * <li>Description:[啟動服務器]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          private void startServer()
              
          {
                  
          // 設置端口,是測試模式和正式模式
                  this.port = NetConfit.localPort;
                  
          try
                  
          {
                      serverSocket 
          = new ServerSocket(port);
                      serverSocket.setSoTimeout(
          30000);
                      executorService 
          = Executors.newCachedThreadPool();
                      NetLoger.log(
          "TCP服務器啟動成功.");
                      
          this.start();
                  }

                  
          catch (Exception ex)
                  
          {
                      isStoped 
          = true;
                      NetLoger.log(
          "TCP服務器啟動失敗.");
                      ex.printStackTrace();
                  }

              }

              
              
          /**
               * <ul>
               * <li>Description:[關閉服務器]</li>
               * <li>Created by [Huyvanpull] [2011-9-6]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              @SuppressWarnings(
          "deprecation")
              
          public void shutDown()
              
          {
                  
          try
                  
          {
                      
          this.executorService.shutdown();
                      
          this.executorService.shutdownNow();
                      
          this.isStoped = true;
                      serverSocket.close();
                  }

                  
          catch (Exception ex)
                  
          {
                      ex.printStackTrace();
                  }

                  NetLoger.log(
          "關閉socket服務器");
              }

              
              
          public static void main(String[] args) throws IOException
              
          {
                  TCPServer.getInstance();
                  System.out.println(TCPServer.getInstance().isStoped);
              }

          }

          posted on 2011-10-22 00:51 HUIKK 閱讀(401) 評論(0)  編輯  收藏 所屬分類: java Net
          主站蜘蛛池模板: 安徽省| 凤山市| 玛曲县| 阿拉善左旗| 吴桥县| 泗洪县| 肥城市| 南京市| 伊宁县| 团风县| 监利县| 迁安市| 巨野县| 湘阴县| 临城县| 丰城市| 陆良县| 望谟县| 北流市| 同心县| 尼玛县| 兴海县| 沽源县| 曲水县| 北海市| 木里| 伊宁县| 什邡市| 钟山县| 临海市| 西吉县| 赣州市| 海淀区| 大姚县| 榆树市| 漯河市| 泽库县| 潞城市| 金湖县| 湖南省| 兴海县|