<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 閱讀(401) 評論(0)  編輯  收藏 所屬分類: java Net
    主站蜘蛛池模板: 一级毛片免费在线播放| 国产午夜无码视频免费网站| 四虎永久在线精品免费一区二区| 亚洲国产高清在线| 亚洲国产精品尤物yw在线 | 女人18特级一级毛片免费视频| 一个人看的在线免费视频| 亚洲精品人成网线在线播放va| 亚洲邪恶天堂影院在线观看| 久久久久国产成人精品亚洲午夜 | 免费在线观看黄色毛片| 中文字幕av无码无卡免费| 全部免费毛片在线播放| 久久一区二区免费播放| 美女视频黄a视频全免费网站色| 亚洲av午夜精品无码专区| 亚洲综合在线观看视频| 国产gv天堂亚洲国产gv刚刚碰| 国产精品免费一级在线观看| 毛片免费在线观看网站| 免费下载成人电影| 99xxoo视频在线永久免费观看| a级日本高清免费看| sihu国产精品永久免费| 免费国产黄网站在线看| www亚洲精品久久久乳| 亚洲色大18成人网站WWW在线播放| 亚洲国产亚洲综合在线尤物| 亚洲成AV人综合在线观看| 亚洲天堂视频在线观看| 亚洲va在线va天堂va888www| 亚洲午夜久久久久久久久电影网| 亚洲人成电影网站国产精品 | 韩日电影在线播放免费版| 男女一进一出抽搐免费视频 | 在线a级毛片免费视频| 免费不卡视频一卡二卡| 成年网站免费视频A在线双飞| 三年片在线观看免费大全| 日韩免费a级毛片无码a∨| 成年性午夜免费视频网站不卡|