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

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        3步學會Java Socket編程(3)

        3步學會Java Socket編程(3)

        更新時間:2022-05-14 文章作者:未知 信息來源:網絡 閱讀次數:

        第三步 實現信息共享:在Socket上的實時交流

          網絡的偉大之一也是信息共享,Server可以主動向所有Client廣播消息,同時Client也可以向其它Client發布消息。下面看看如何開發一個可以實時傳遞消息的程序。

          設計原理:

          服務器端接受客戶端的連接請求,同時啟動一個線程處理這個連接,線程不停的讀取客戶端輸入,然后把輸入加入隊列中,等候處理。在線程啟動的同時將線程加入隊列中,以便在需要的時候定位和取出。

          {源碼}


        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;
        }
        }
        }



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

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 日本中文字幕免费看| 两性色午夜视频免费播放| 免费福利视频导航| 亚洲免费视频播放| 亚洲区不卡顿区在线观看| 很黄很黄的网站免费的| 狠狠热精品免费观看| 亚洲AV无码1区2区久久| 无码高潮少妇毛多水多水免费| yellow免费网站| 亚洲人成自拍网站在线观看| 666精品国产精品亚洲| 国产片免费在线观看| 色妞WWW精品免费视频| 最近免费中文字幕大全免费版视频 | 亚洲人成人无码.www石榴| 免费欧洲美女牲交视频| 在线看片韩国免费人成视频| 成人免费网站久久久| 国产亚洲Av综合人人澡精品| 亚洲日韩在线视频| 亚洲av激情无码专区在线播放| 日韩免费视频网站| 成人免费AA片在线观看| 女人被弄到高潮的免费视频 | 女人18毛片水最多免费观看 | 亚洲国产精品激情在线观看 | 亚洲最大在线视频| 国产精品国产亚洲精品看不卡| 日韩精品亚洲专区在线观看| 免费无码A片一区二三区| 最近2019中文字幕免费大全5| 国产成人免费高清激情明星| 97免费人妻无码视频| 女人18毛片免费观看| 四虎免费永久在线播放| 亚洲香蕉成人AV网站在线观看| 亚洲AV无码乱码在线观看性色扶| 国产午夜亚洲精品午夜鲁丝片| 亚洲精品国产suv一区88| 国产小视频在线免费|