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

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

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

    隨筆-88  評論-77  文章-48  trackbacks-0

    ??? /**
    ???? * 方法名稱:runServer<p>
    ???? * 方法功能:運行代理服務器<p>
    ???? * 參數說明: <p>
    ???? * 返回:void <p>
    ???? * 作者:李明
    ???? * 日期:2006年3月9日
    ???? * @throws IOException
    ???? */
    ??? public void runServer() throws IOException
    ??? {
    ??????? // 創建代理服務器監聽,端口默認為9999(可以通過屬性文檔修改其他端口)
    ??????? ServerSocket ss = new ServerSocket(localport);
    ??????? final com.zte.ums.zxnm01.cpe.common.http.ProxyUtil proxyUtil = new com.zte.ums.zxnm01.cpe.common.http.ProxyUtil();
    ??????? final byte[] request = new byte[1024];
    ??????? byte[] reply = new byte[4096];

    ??????? while(true)
    ??????? {
    ??????????? Socket client = null, server = null;
    ??????????? try
    ??????????? {
    ??????????????? // 等待客戶連接
    ??????????????? client = ss.accept();
    ??????????????? log.info("*******Client logon*******");
    ??????????????? log.info(client);
    ??????????????? final InputStream streamFromClient = client.getInputStream();
    ??????????????? final OutputStream streamToClient = client.getOutputStream();

    ??????????????? // 連接真實的服務器,如果不能連接成功,將向客戶發送錯誤信息,斷開本次連接
    ??????????????? // 并且繼續等待連接.
    ??????????????? try
    ??????????????? {
    ??????????????????? server = new Socket(host, remoteport);
    ??????????????? }
    ??????????????? catch(IOException e)
    ??????????????? {
    ??????????????????? PrintWriter out = new PrintWriter(streamToClient);
    ??????????????????? out.print("Proxy server cannot connect to " + host + ":" + remoteport + ":\n" + e + "\n");
    ??????????????????? out.flush();
    ??????????????????? client.close();
    ??????????????????? continue;
    ??????????????? }

    ??????????????? // 得到連接服務器的輸入輸出流.
    ??????????????? final InputStream streamFromServer = server.getInputStream();
    ??????????????? final OutputStream streamToServer = server.getOutputStream();

    ??????????????? // 構建一個單獨線程讀客戶請求并傳給服務器,此線程為異步.
    ??????????????? Thread t = new Thread()
    ??????????????? {
    ??????????????????? public void run()
    ??????????????????? {
    ??????????????????????? int bytesRead;
    ??????????????????????? String context = null;
    ??????????????????????? try
    ??????????????????????? {
    ??????????????????????????? while((bytesRead = streamFromClient.read(request)) != -1)
    ??????????????????????????? {
    ??????????????????????????????? streamToServer.write(request, 0, bytesRead);
    ??????????????????????????????? context = new String(request).trim();
    ??????????????????????????????? streamToServer.flush();
    ??????????????????????????? }
    ??????????????????????????? // 打印客戶瀏覽器發來的信息
    ??????????????????????????? log.info("#################S##############");
    ??????????????????????????? log.info(context);
    ??????????????????????????? log.info("#################E##############");
    ??????????????????????????? // 解析發來的信息,獲取請求的主機地址和端口.
    ??????????????????????????? proxyUtil.setUrl(context);
    ??????????????????????????? host = proxyUtil.getHost();
    ??????????????????????????? remoteport = proxyUtil.getPort();
    ??????????????????????????? log.info("host : '" + host + "'" + " port : '" + remoteport + "'");

    ??????????????????????? }
    ??????????????????????? catch(IOException e)
    ??????????????????????? {
    ??????????????????????????? // e.printStackTrace();
    ??????????????????????? }

    ??????????????????????? // 關閉請求服務器連接,屏蔽無意義的異常,減少代理服務器負擔.
    ??????????????????????? try
    ??????????????????????? {
    ??????????????????????????? streamToServer.close();
    ??????????????????????? }
    ??????????????????????? catch(IOException e)
    ??????????????????????? {
    ??????????????????????????? // e.printStackTrace();
    ??????????????????????? }
    ??????????????????? }
    ??????????????? };

    ??????????????? // 開啟客戶端到服務器請求線程
    ??????????????? t.start();

    ??????????????? // 讀服務器的請求,成功后返回信息給客戶端.
    ??????????????? int bytesRead;
    ??????????????? try
    ??????????????? {
    ??????????????????? while((bytesRead = streamFromServer.read(reply)) != -1)
    ??????????????????? {
    ??????????????????????? streamToClient.write(reply, 0, bytesRead);
    ??????????????????????? streamToClient.flush();
    ??????????????????? }
    ??????????????? }
    ??????????????? catch(IOException e)
    ??????????????? {
    ??????????????????? // e.printStackTrace();
    ??????????????? }

    ??????????????? // 關閉客戶連接.
    ??????????????? streamToClient.close();
    ??????????? }
    ??????????? catch(IOException e)
    ??????????? {
    ??????????????? System.err.println(e);
    ??????????? }
    ??????????? finally
    ??????????? {
    ??????????????? try
    ??????????????? {
    ??????????????????? if(server != null)
    ??????????????????? {
    ??????????????????????? server.close();
    ??????????????????? }
    ??????????????????? if(client != null)
    ??????????????????? {
    ??????????????????????? client.close();
    ??????????????????? }
    ??????????????? }
    ??????????????? catch(IOException e)
    ??????????????? {
    ??????????????????? e.printStackTrace();
    ??????????????? }
    ??????????? }
    ??????? }
    ??? }

    posted on 2006-04-28 11:24 崛起的程序員 閱讀(249) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲人成精品久久久久| 国产免费人人看大香伊| 国产亚洲av片在线观看16女人| 在线观看人成网站深夜免费| 久久精品国产亚洲av麻豆蜜芽| 免费精品国产自产拍在线观看图片 | 午夜影视在线免费观看| 亚洲AV成人一区二区三区在线看| 人禽杂交18禁网站免费| 亚洲人成网站免费播放| 最近国语视频在线观看免费播放 | 免费精品久久天干天干| 亚洲av永久无码精品国产精品| 久久国产精品免费视频| 国产成人免费a在线视频app| 老司机免费午夜精品视频| 亚洲五月综合缴情在线观看| 久久久久久国产精品免费免费男同 | 巨胸狂喷奶水视频www网站免费| 精品亚洲永久免费精品| 粉色视频免费入口| 日日噜噜噜噜夜夜爽亚洲精品| 亚洲精品乱码久久久久久V | 亚洲一区精彩视频| 国产乱色精品成人免费视频| 一区二区三区免费视频网站| 免费av欧美国产在钱| 成人亚洲国产精品久久| 亚洲无人区一区二区三区| 91免费国产自产地址入| 亚洲另类无码一区二区三区| 中文字幕亚洲综合久久男男| 亚洲午夜精品一区二区麻豆| 国产在线观看麻豆91精品免费| 国产成人亚洲综合色影视| 国产情侣激情在线视频免费看| 亚洲真人日本在线| 免费人成大片在线观看播放电影 | 亚洲成电影在线观看青青| 在线观看免费亚洲| 国产亚洲精品影视在线|