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

        主站蜘蛛池模板: 三上悠亚在线观看免费| 99久9在线|免费| 久久精品国产亚洲AV麻豆~| 日本片免费观看一区二区| 亚洲1区2区3区精华液| 国产亚洲成av片在线观看| 国产成人免费高清激情视频| a级毛片免费观看在线| 亚洲av成人一区二区三区| 亚洲无码日韩精品第一页| 日本人的色道免费网站| 皇色在线免费视频| 日本亚洲免费无线码| 亚洲av无码专区在线播放| 在线观看免费国产视频| 中文字幕在线观看免费视频 | 黄网站色视频免费观看45分钟| 亚洲国产精品嫩草影院在线观看 | 免费视频精品一区二区| 亚洲一区二区三区播放在线 | 亚洲AV综合色区无码二区爱AV| 国产午夜亚洲不卡| 成人a视频片在线观看免费| 久久精品无码精品免费专区| 黄色免费在线网址| 成人亚洲国产va天堂| 97亚洲熟妇自偷自拍另类图片| 免费亚洲视频在线观看| 国产人在线成免费视频| 青青操免费在线视频| 精品在线观看免费| 亚洲午夜精品久久久久久app| 亚洲精品高清久久| 自拍偷自拍亚洲精品情侣| 免费人成在线观看播放国产 | 亚洲偷自拍另类图片二区| 亚洲人成在线播放网站岛国| 亚洲综合色成在线播放| 国产乱子伦精品免费无码专区| 我想看一级毛片免费的| 亚洲免费一级视频|