C语言学习网

Java Socket线程的设计原理是什么

发表于:2022-08-20 作者:安全数据网编辑
编辑最后更新 2022年08月20日,这篇文章主要讲解了"Java Socket线程的设计原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Socket线程的设计原理是什么

这篇文章主要讲解了"Java Socket线程的设计原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Socket线程的设计原理是什么"吧!

Java Socket线程我们经常会用到的技术,但是有很多程序员还是有不少的使用问题,下面我们就看看如何才能进行有关的代码编写,希望大家又说收获。网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。

下面看看如何开发一个可以实时传递消息的程序。

Java Socket线程的设计原理:

服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将线程加入队列中,以便在需要的时候定位和取出。

{源码}

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线程的设计原理是什么"的内容了,经过本文的学习后,相信大家对Java Socket线程的设计原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0