• <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)下載排行

        主站蜘蛛池模板: 亚洲第一页在线观看| 亚洲精品无码鲁网中文电影| 亚洲剧场午夜在线观看| 国产成人一区二区三区视频免费| 亚洲国产精品综合久久一线| 黄色一级视频免费| 成人亚洲性情网站WWW在线观看| 人人鲁免费播放视频人人香蕉| 亚洲第一区精品日韩在线播放| 一区二区三区在线观看免费| 亚洲美日韩Av中文字幕无码久久久妻妇| 免费的黄色网页在线免费观看| 国产精品V亚洲精品V日韩精品 | 欧洲亚洲国产精华液| 国产成人aaa在线视频免费观看| 国产精品亚洲精品久久精品| 免费在线观看理论片| 国产午夜无码片免费| 亚洲av日韩av不卡在线观看| 久久久久久曰本AV免费免费| 亚洲中文无码永久免| 国产区卡一卡二卡三乱码免费| 亚美影视免费在线观看| 亚洲AV日韩AV天堂久久| 成年美女黄网站18禁免费| 老湿机一区午夜精品免费福利| 国产亚洲一区二区三区在线| 在线看免费观看AV深夜影院| 曰批全过程免费视频免费看 | 无限动漫网在线观看免费| 小说区亚洲自拍另类| 亚洲情XO亚洲色XO无码| 啦啦啦完整版免费视频在线观看 | 国产视频精品免费视频| 精品无码一区二区三区亚洲桃色 | 亚洲综合自拍成人| 最近免费中文字幕4| 72pao国产成视频永久免费| 亚洲jjzzjjzz在线播放| 亚洲性日韩精品一区二区三区| 日本h在线精品免费观看|