• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

        3步學(xué)會(huì)Java Socket編程(3)

        3步學(xué)會(huì)Java Socket編程(3)

        更新時(shí)間:2022-05-14 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        第三步 實(shí)現(xiàn)信息共享:在Socket上的實(shí)時(shí)交流

          網(wǎng)絡(luò)的偉大之一也是信息共享,Server可以主動(dòng)向所有Client廣播消息,同時(shí)Client也可以向其它Client發(fā)布消息。下面看看如何開發(fā)一個(gè)可以實(shí)時(shí)傳遞消息的程序。

          設(shè)計(jì)原理:

          服務(wù)器端接受客戶端的連接請(qǐng)求,同時(shí)啟動(dòng)一個(gè)線程處理這個(gè)連接,線程不停的讀取客戶端輸入,然后把輸入加入隊(duì)列中,等候處理。在線程啟動(dòng)的同時(shí)將線程加入隊(duì)列中,以便在需要的時(shí)候定位和取出。

          {源碼}


        import java.io.*;
        import java.net.*;
        import java.util.*;
        import java.lang.*;

        public class Server extends ServerSocket
        {
        private static ArrayList User_List = new ArrayList();
        private static ArrayList Threader = new ArrayList();
        private static LinkedList Message_Array = new LinkedList();
        private static int Thread_Counter = 0;
        private static boolean isClear = true;
        protected static final int SERVER_PORT = 10000;
        protected FileOutputStream LOG_FILE = new FileOutputStream("d:/connect.log", true);

        public Server() throws FileNotFoundException, IOException
        {
        super(SERVER_PORT);
        new Broadcast();

        //append connection log
        Calendar now = Calendar.getInstance();
        String str = "[" + now.getTime().toString() + "] Accepted a connection\015\012";
        byte[] tmp = str.getBytes();
        LOG_FILE.write(tmp);

        try
        {
        while (true)
        {
        Socket socket = accept();
        new CreateServerThread(socket);
        }
        }
        finally
        {
        close();
        }
        }

        public static void main(String[] args) throws IOException
        {
        new Server();
        }

        //--- Broadcast
        class Broadcast extends Thread
        {
        public Broadcast()
        {
        start();
        }

        public void run()
        {
        while (true)
        {
        if (!isClear)
        {
        String tmp = (String)Message_Array.getFirst();

        for (int i = 0; i < Threader.size(); i++)
        {
        CreateServerThread client = (CreateServerThread)Threader.get(i);
        client.sendMessage(tmp);
        }

        Message_Array.removeFirst();
        isClear = Message_Array.size() > 0 ? false : true;
        }
        }
        }
        }

        //--- CreateServerThread
        class CreateServerThread extends Thread
        {
        private Socket client;
        private BufferedReader in;
        private PrintWriter out;
        private String Username;

        public CreateServerThread(Socket s) throws IOException
        {
        client = s;
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        out = new PrintWriter(client.getOutputStream(), true);
        out.println("--- Welcome to this chatroom ---");
        out.println("Input your nickname:");
        start();
        }

        public void sendMessage(String msg)
        {
        out.println(msg);
        }

        public void run()
        {
        try
        {
        int flag = 0;
        Thread_Counter++;
        String line = in.readLine();

        while (!line.equals("bye"))
        {
        if (line.equals("l"))
        {
        out.println(listOnlineUsers());
        line = in.readLine();
        continue;
        }

        if (flag++ == 0)
        {
        Username = line;
        User_List.add(Username);
        out.println(listOnlineUsers());
        Threader.add(this);
        pushMessage("[< " + Username + " come on in >]");
        }
        else
        {
        pushMessage("<" + Username + ">" + line);
        }

        line = in.readLine();
        }

        out.println("--- See you, bye! ---");
        client.close();
        }
        catch (IOException e)
        {}
        finally
        {
        try
        {
        client.close();
        }
        catch (IOException e)
        {}

        Thread_Counter--;
        Threader.remove(this);
        User_List.remove(Username);
        pushMessage("[< " + Username + " left>]");
        }
        }


        private String listOnlineUsers()
        {
        String s ="-+- Online list -+-\015\012";

        for (int i = 0; i < User_List.size(); i++)
        {
        s += "[" + User_List.get(i) + "]\015\012";
        }

        s += "-+---------------------+-";
        return s;
        }

        private void pushMessage(String msg)
        {
        Message_Array.addLast(msg);
        isClear = false;
        }
        }
        }



          這就是程序運(yùn)行后,多用戶登陸并且輸入信息后的屏幕。實(shí)現(xiàn)了信息的實(shí)時(shí)廣播。用戶輸入"l"就可以列出在線人員表。

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲国产成人精品青青草原| 亚洲综合网站色欲色欲| 亚洲综合综合在线| 三年片免费高清版| 亚洲国产人成在线观看69网站 | 在线永久看片免费的视频| 午夜亚洲国产理论秋霞| 亚洲精品免费视频| 7777久久亚洲中文字幕蜜桃| 99久在线国内在线播放免费观看 | 最新亚洲成av人免费看| 精品久久久久久无码免费| 亚洲啪啪AV无码片| 免费日本一区二区| 亚洲黄色网址在线观看| 日韩吃奶摸下AA片免费观看| 亚洲欧美一区二区三区日产| 亚洲 综合 国产 欧洲 丝袜| 久久成人18免费网站| 久久亚洲AV无码精品色午夜| 午夜精品在线免费观看| 精品成人一区二区三区免费视频 | 亚洲乱码中文论理电影| 日韩精品无码人妻免费视频| 免费国产高清毛不卡片基地| 亚洲自偷自偷图片| 免费h片在线观看网址最新| 亚洲人成自拍网站在线观看| 波多野结衣视频在线免费观看| 男女一进一出抽搐免费视频 | 国产一级一片免费播放| 韩国免费a级作爱片无码| 亚洲视频在线免费看| 日韩特黄特色大片免费视频| 九九热久久免费视频| 亚洲中文久久精品无码1| 亚洲高清偷拍一区二区三区| 91香蕉在线观看免费高清| 国产精品亚洲lv粉色| 亚洲va久久久噜噜噜久久天堂| 成年人免费视频观看|