知识大全 Java Socket线程的设计原理介绍

Posted

篇首语:农村四月闲人少,勤学苦攻把名扬。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Socket线程的设计原理介绍相关的知识,希望对你有一定的参考价值。

Java Socket线程的设计原理介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

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

  Java Socket线程的设计原理

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

  源码}

   import java io *;

   import *;

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

   private static boolean isClear = true;

   protected static final int SERVER_PORT = ;

   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 ;

   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 = ; i < Threader size(); i++)

  

   CreateServerThread client = (CreateServerThread)Threader get(i);

   client sendMessage(tmp);

  

   Message_Array removeFirst();

   isClear = Message_Array size() > ? 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( Wele to this chatroom );

   out println( Input your nickname: );

   start();

  

   public void sendMessage(String msg)

  

   out println(msg);

  

   public void run()

  

   try

  

   int flag = ;

   Thread_Counter++;

   String line = in readLine();

   while (!line equals( bye ))

  

   if (line equals( l ))

  

   out println(listOnlineUsers());

   line = in readLine();

  ntinue;

  

   if (flag++ == )

  

   Username = line;

   User_List add(Username);

   out println(listOnlineUsers());

   Threader add(this);

   pushMessage( [< + Username + e 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 + ;

   for (int i = ; i < User_List size(); i++)

  

   s += [ + User_List get(i) + ] ;

  

   s += + + ;

   return s;

  

   private void pushMessage(String msg)

  

   Message_Array addLast(msg);

   isClear = false;

  

  

  

cha138/Article/program/Java/hx/201311/25686

相关参考

知识大全 socket 线程 思路 java

  网上参考别人的例子改自己的程序终于搞明白了原来在socket的服务器端设置线程并不是像之前想的那样建立一个连接后就重新开一个端口去监听这样的想法遇到了很多问题首先当我把客户端弄成for循环递增的链

知识大全 Java多线程Socket操作猜数游戏样例

Java多线程Socket操作猜数游戏样例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  服务器

知识大全 Java多线程Socket操作猜数游戏样例[2]

Java多线程Socket操作猜数游戏样例[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 Java多线程Socket操作猜数游戏样例[1]

Java多线程Socket操作猜数游戏样例[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 Java Socket多线程服务端、客户端

JavaSocket多线程服务端、客户端  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //主方

知识大全 Java Socket 编程——多线程网络聊天程序

JavaSocket编程——多线程网络聊天程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用

知识大全 Java Socket多线程如何支持服务器模型

JavaSocket多线程如何支持服务器模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 Java Socket通信技术收发线程互斥的解决方法

JavaSocket通信技术收发线程互斥的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java线程的概念与原理

Java线程的概念与原理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一操作系统中线程和进程的

知识大全 JAVA高级:多核线程-volatile原理与技巧[1]

JAVA高级:多核线程-volatile原理与技巧[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下