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

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

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

    隨筆 - 303  文章 - 883  trackbacks - 0
    <2007年2月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728123
    45678910

    歡迎光臨! 
    閑聊 QQ:1074961813

    隨筆分類(357)

    我管理的群

    公共blog

    • n維空間
    • Email : java3d@126.com 群 : 12999758

    參與管理的論壇

    好友的blog

    我的其他blog

    朋友的網站

    搜索

    •  

    最新評論

    ServerSocket用法詳解 教程下載?? 源代碼下載

    嗨,大家好,我是尋覓:各位JAVA愛好者你現在看到是本人摘取上面教程的一部分,即我和一個網友遇到的問題,和解決。如果你對ServerSocket用法很重視,想系統學習;請下載上面的教程(來自:developer.51cto.com),謝謝支持 !

    3.6? 創建多線程的服務器

    在本書第1章的1.5.1節的例程1-2的EchoServer中,其service()方法負責接收客戶連接,以及與客戶通信。service()方法的處理流程如下:

    while (true) {

    Socket socket=null;

    try {

    socket = serverSocket.accept();? ???//接收客戶連接

    //從Socket中獲得輸入流與輸出流,與客戶通信





    }catch (IOException e) {

    e.printStackTrace();

    }finally {

    try{

    if(socket!=null)socket.close();? ??//斷開連接

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

    }

    }

    EchoServer接收到一個客戶連接,就與客戶進行通信,通信完畢后斷開連接,然后再接收下一個客戶連接。假如同時有多個客戶請求連接,這些客戶就必須排隊等候EchoServer的響應。EchoServer無法同時與多個客戶通信。

    許多實際應用要求服務器具有同時為多個客戶提供服務的能力。HTTP服務器就是最明顯的例子。任何時刻,HTTP服務器都可能接收到大量的客戶請求,每個客戶都希望能快速得到HTTP服務器的響應。如果長時間讓客戶等待,會使網站失去信譽,從而降低訪問量。

    可以用并發性能來衡量一個服務器同時響應多個客戶的能力。一個具有好的并發性能的服務器,必須符合兩個條件:

    ◆能同時接收并處理多個客戶連接;

    ◆對于每個客戶,都會迅速給予響應。

    服務器同時處理的客戶連接數目越多,并且對每個客戶作出響應的速度越快,就表明并發性能越高。

    用多個線程來同時為多個客戶提供服務,這是提高服務器的并發性能的最常用的手段。本節將按照3種方式來重新實現EchoServer,它們都使用了多線程。

    ◆為每個客戶分配一個工作線程。

    ◆創建一個線程池,由其中的工作線程來為客戶服務。

    ◆利用JDK的Java類庫中現成的線程池,由它的工作線程來為客戶服務。

    3.6.1? 為每個客戶分配一個線程

    服務器的主線程負責接收客戶的連接,每次接收到一個客戶連接,就會創建一個工作線程,由它負責與客戶的通信。以下是EchoServer的service()方法的代碼:

    public void service() {

    while (true) {

    Socket socket=null;

    try {

    socket = serverSocket.accept();? ????//接收客戶連接

    Thread workThread=new Thread(new Handler(socket));? ?//創建一個工作線程

    workThread.start();? ??????//啟動工作線程

    }catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    以上工作線程workThread執行Handler的run()方法。Handler類實現了Runnable接口,它的run()方法負責與單個客戶通信,與客戶通信結束后,就會斷開連接,執行Handler的run()方法的工作線程也會自然終止。如例程3-5所示是EchoServer類及Handler類的源程序。

    例程3-5? EchoServer.java(為每個任務分配一個線程)

    package multithread1;

    import java.io.*;

    import java.net.*;

    public class EchoServer {

    private int port=8000;

    private ServerSocket serverSocket;

    public EchoServer() throws IOException {

    serverSocket = new ServerSocket(port);

    System.out.println("服務器啟動");

    }

    public void service() {

    while (true) {

    Socket socket=null;

    try {

    socket = serverSocket.accept();? ????//接收客戶連接

    Thread workThread=new Thread(new Handler(socket));? ?//創建一個工作線程

    workThread.start();? ??????//啟動工作線程

    }catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    public static void main(String args[])throws IOException {

    new EchoServer().service();

    }

    }

    class Handler implements Runnable{? ?????//負責與單個客戶的通信

    private Socket socket;

    public Handler(Socket socket){

    this.socket=socket;

    }

    private PrintWriter getWriter(Socket socket)throws IOException{…}

    private BufferedReader getReader(Socket socket)throws IOException{…}

    public String echo(String msg) {…}

    public void run(){

    try {

    System.out.println("New connection accepted " +

    socket.getInetAddress() + ":" +socket.getPort());

    BufferedReader br =getReader(socket);

    PrintWriter pw = getWriter(socket);



    String msg = null;

    while ((msg = br.readLine()) != null) {? ???//接收和發送數據,直到通信結束

    System.out.println(msg);

    pw.println(echo(msg));

    if (msg.equals("bye"))

    break;

    }

    }catch (IOException e) {

    e.printStackTrace();

    }finally {

    try{

    if(socket!=null)socket.close();?? ????//斷開連接

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

    }

    }

    }




    ?



    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2007-02-22 23:05 小尋 閱讀(1275) 評論(0)  編輯  收藏 所屬分類: j2se/j2ee/j2menetwork
    主站蜘蛛池模板: 亚洲成在人线在线播放无码 | 午夜电影免费观看| 亚洲毛片免费视频| 2021国内精品久久久久精免费| 亚洲精品国产精品乱码不卡√| 日本道免费精品一区二区| 亚洲日产无码中文字幕| 97超高清在线观看免费视频| 亚洲成AV人片在线观看| 最近高清中文字幕免费| 亚洲国产午夜精品理论片| A在线观看免费网站大全| 亚洲乱码一二三四区国产| 我想看一级毛片免费的| 久久亚洲精品高潮综合色a片| 国产中文字幕免费| 乱人伦中文视频在线观看免费| 国产精品亚洲高清一区二区 | 久久精品亚洲AV久久久无码 | 欧美亚洲精品一区二区| 亚洲av午夜精品一区二区三区 | 四虎影视永久免费观看| 国产免费内射又粗又爽密桃视频| 亚洲一区二区三区偷拍女厕| 美丽的姑娘免费观看在线播放| 亚洲va久久久久| 国产亚洲精品精品国产亚洲综合| 久久免费看少妇高潮V片特黄| 亚洲乱码日产精品BD在线观看| 免费h成人黄漫画嘿咻破解版| a级成人毛片免费图片| 国产.亚洲.欧洲在线| 免费在线精品视频| 99爱视频99爱在线观看免费| 在线观看日本亚洲一区| 久久激情亚洲精品无码?V| 99国产精品永久免费视频| 一级毛片在播放免费| 亚洲av永久无码嘿嘿嘿| 亚洲三区在线观看无套内射| 日韩毛片免费无码无毒视频观看|