溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java Socket線程的設(shè)計原理是什么

發(fā)布時間:2021-07-28 09:09:40 來源:億速云 閱讀:107 作者:chen 欄目:編程語言

這篇文章主要講解了“Java Socket線程的設(shè)計原理是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java Socket線程的設(shè)計原理是什么”吧!

Java Socket線程我們經(jīng)常會用到的技術(shù),但是有很多程序員還是有不少的使用問題,下面我們就看看如何才能進(jìn)行有關(guān)的代碼編寫,希望大家又說收獲。網(wǎng)絡(luò)的偉大之一也是信息共享,Server可以主動向所有Client廣播消息,同時Client也可以向其它Client發(fā)布消息。

下面看看如何開發(fā)一個可以實時傳遞消息的程序。

Java Socket線程的設(shè)計原理:

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

{源碼}

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 connection1512";   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 -+-1512";   for (int i = 0; i < User_List.size(); i++)   {   s += "[" + User_List.get(i) + "]1512";   }   s += "-+---------------------+-";   return s;   }   private void pushMessage(String msg)   {   Message_Array.addLast(msg);   isClear = false;   }   }   }

感謝各位的閱讀,以上就是“Java Socket線程的設(shè)計原理是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java Socket線程的設(shè)計原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI