<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      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
            {
                
    // 創建緩沖讀寫
                br 
    = new BufferedReader(new InputStreamReader(socket
                        .getInputStream()));
                bw 
    = new BufferedWriter(new OutputStreamWriter(socket
                        .getOutputStream()));
                
                
    // 客戶端發來的消息
                String msg 
    = null;
                
    while (true)
                {
                    msg 
    = readLine();
                    
                    
    // 這里是遠程商品,發向遠程
                    processor.process(getRemoteIp(), msg);
                    write(NetConfit.tcp_oparator_success);
                }
                
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                freeSource();
            }
        }
        
        
    /**
         * <ul>
         * <li>Description:[寫數據]</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;
            }
            
            
    // 處理消息,加上部首, 且加密數據,防止非法者抓包
            String encodeMsg 
    = NetConfit.tcp_msg_head + msg;
            encodeMsg 
    = AESUtil.encrypt(encodeMsg, NetConfit.password);
            
            
    // 寫數據
            bw.write(encodeMsg);
            bw.newLine();
            bw.flush();
            
            
    // 記錄日志
            NetLoger.logSnd(getRemoteIp(), socket.getPort(), msg);
        }
        
        
    /**
         * <ul>
         * <li>Description:[讀數據]</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 
    = "";
            
    // 讀取一行數據,并判斷數據是否非法
            String endcodeMsg 
    = br.readLine();
            
    if (endcodeMsg == null || "".equals(endcodeMsg))
            {
                
    return decodeMsg;
            }
            
            
    // 解密數據,并判斷數據是否是合法的
            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網絡服務]</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;
        
        
    /** 是否啟動成功(如端口已經被占用,就不能啟動成功) */
        
    private boolean isStoped = false;
        
        
    /**
         * <ul>
         * <li>Description:[構造方法]</li>
         * <ul>
         
    */

        
    private TCPServer()
        
    {
            startServer();
        }

        
        
    /**
         * <ul>
         * <li>Description:[得到單態的實例]</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 閱讀(400) 評論(0)  編輯  收藏 所屬分類: java Net
    主站蜘蛛池模板: 国产福利在线观看免费第一福利| 亚洲一区在线免费观看| 免费看的一级毛片| 久久成人免费电影| 一级特黄录像免费播放中文版| 亚洲一卡2卡4卡5卡6卡残暴在线| 亚洲av无码一区二区三区网站| 亚洲国产一区明星换脸| 在线观看免费大黄网站| 99久久99这里只有免费费精品| 日本中文字幕免费高清视频| 一级人做人爰a全过程免费视频 | 免费福利资源站在线视频| 麻豆狠色伊人亚洲综合网站| 久久精品国产亚洲夜色AV网站| 亚洲区日韩区无码区| 国产不卡免费视频| 国产精品免费视频网站| 成人免费淫片在线费观看 | 亚洲熟妇AV日韩熟妇在线| 亚洲国产人成在线观看| 亚洲va在线va天堂va888www| 国产精品亚洲精品日韩已满| 黑人大战亚洲人精品一区 | 羞羞视频网站免费入口| 亚洲码和欧洲码一码二码三码| 亚洲精品亚洲人成在线播放| 亚洲免费电影网站| 亚洲无吗在线视频| 亚洲综合无码一区二区痴汉| 亚洲娇小性色xxxx| 亚洲人成网站在线播放2019 | 日本免费一二区在线电影| 午夜精品在线免费观看| 免费鲁丝片一级观看| 国产男女猛烈无遮档免费视频网站| 日本v片免费一区二区三区| 日本一区免费电影| 亚洲无码精品浪潮| 亚洲人成色777777在线观看| 久久精品亚洲中文字幕无码网站|