<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 崛起的程序員 閱讀(248) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲免费黄色网址| 一本岛v免费不卡一二三区| 亚欧色视频在线观看免费| 国产亚洲一区二区三区在线| 一级黄色毛片免费看| 亚洲精品国产电影| igao激情在线视频免费| 国产偷国产偷亚洲高清日韩| 亚洲精品黄色视频在线观看免费资源 | 亚洲av永久无码精品漫画| 在线免费视频你懂的| 亚洲爆乳精品无码一区二区三区 | 日韩免费无码一区二区三区| 亚洲综合久久1区2区3区| 亚洲免费一级视频| 亚洲啪AV永久无码精品放毛片| 日韩伦理片电影在线免费观看| 美女黄频a美女大全免费皮| 国产黄色一级毛片亚洲黄片大全 | 亚洲妓女综合网99| 日本高清免费网站| 一区二区三区在线免费| 图图资源网亚洲综合网站| 无码国产精品一区二区免费式直播 | 亚洲国产精品特色大片观看完整版| 国产精品网站在线观看免费传媒| 久久精品国产精品亚洲艾| 无码乱肉视频免费大全合集| 大桥未久亚洲无av码在线| 国产啪亚洲国产精品无码| 日本免费一区二区三区| 亚洲色精品VR一区区三区| 亚洲а∨天堂久久精品| 久久久久免费看黄a级试看 | 一个人看的免费高清视频日本| 亚洲AV日韩AV高潮无码专区| 免费A级毛片无码免费视| 久久久WWW免费人成精品| 亚洲精品一区二区三区四区乱码| 日韩视频免费在线| 久久午夜夜伦鲁鲁片免费无码 |