知识大全 java多线程控制台聊天室

Posted 消息

篇首语:不要以为你的努力徒劳无功,权当做磨练你的意志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java多线程控制台聊天室相关的知识,希望对你有一定的参考价值。

  package tf thread;

  import java io BufferedReader;

  import java io IOException;

  import java io InputStreamReader;

  import java io PrintWriter;

  import ServerSocket;

  import Socket;

  import java util ArrayList;

  import java util List;

  import ncurrent ExecutorService;

  import ncurrent Executors;

  public class ChatServer

  private static final int PORT = ; // 端口号

  private static List<Socket> list = new ArrayList<Socket>(); // 保存连接对象

  private ExecutorService exec;

  private ServerSocket server;

  public static void main(String[] args)

  new ChatServer();

  

  public ChatServer()

  try

  server = new ServerSocket(PORT);

  exec = Executors newCachedThreadPool();

  System out println( 服务器已启动! );

  Socket client = null;

  while (true)

  client = server accept(); // 接收客户连接

  list add(client);

  exec execute(new ChatTask(client));

  

   catch (IOException e)

  e printStackTrace();

  

  

  static class ChatTask implements Runnable

  private Socket socket;

  private BufferedReader br;

  private PrintWriter pw;

  private String msg;

  public ChatTask(Socket socket) throws IOException

  this socket = socket;

  br = new BufferedReader(new InputStreamReader(socket

   getInputStream()));

  msg = 【 + this socket getInetAddress() + 】进入聊天室!当前聊天室有【

  + list size() + 】人 ;

  sendMessage();

  

  public void run()

  try

  while ((msg = br readLine()) != null)

  if (msg trim() equals( bye ))

  list remove(socket);

  br close();

  pw close();

  msg = 【 + socket getInetAddress() + 】离开聊天室!当前聊天室有【

  + list size() + 】人 ;

  socket close();

  sendMessage();

  break;

   else

  msg = 【 + socket getInetAddress() + 】说 + msg;

  sendMessage();

  

  

   catch (IOException e)

  e printStackTrace();

  

  

  /**

  * 群发消息给聊天室的所有人

  */

  private void sendMessage() throws IOException

  System out println(msg);

  for (Socket client : list)

  pw = new PrintWriter(client getOutputStream() true);

  pw println(msg);

  

  

  

  

  

  package tf thread;

  import java io BufferedReader;

  import java io InputStreamReader;

  import java io PrintWriter;

  import Socket;

  import ncurrent ExecutorService;

  import ncurrent Executors;

  public class ChatClient

  private static final int PORT = ;

  private static ExecutorService exec = Executors newCachedThreadPool();

  public static void main(String[] args) throws Exception

  new ChatClient();

  

  public ChatClient()

  try

  Socket socket = new Socket( PORT);

  exec execute(new Sender(socket));

  System out

   println( 【 + socket getInetAddress() + 】您好 欢迎来到阿飞聊天室! );

  BufferedReader br = new BufferedReader(new InputStreamReader(socket

   getInputStream()));

  String msg;

  while ((msg = br readLine()) != null)

  System out println(msg);

  

   catch (Exception e)

  

  

  /**

  * 客户端线程获取控制台输入消息

  */

  static class Sender implements Runnable

  private Socket socket;

  public Sender(Socket socket)

  this socket = socket;

  

  public void run()

  try

  BufferedReader br = new BufferedReader(new InputStreamReader(

  System in));

  PrintWriter pw = new PrintWriter(socket getOutputStream() true);

  String msg;

  while (true)

  msg = br readLine();

  pw println(msg);

  if (msg trim() equals( bye ))

  pw close();

  br close();

  exec shutdownNow();

  break;

  

  

   catch (Exception e)

  e printStackTrace();

  

  

  

cha138/Article/program/Java/gj/201311/27478

相关参考

知识大全 Java多线程程序设计初步入门

Java多线程程序设计初步入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java语言产生

知识大全 浅析Java多线程程序设计机制

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

知识大全 Java多线程程序设计二十三个要点[4]

Java多线程程序设计二十三个要点[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java多线程程序设计二十三个要点[3]

Java多线程程序设计二十三个要点[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java多线程程序设计二十三个要点[2]

Java多线程程序设计二十三个要点[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java多线程程序设计二十三个要点[1]

Java多线程程序设计二十三个要点[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java控制台程序输入语句初探

Java控制台程序输入语句初探  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在java控制台程

知识大全 qq聊天记录和聊天的人都删除了,在另一台电脑上还看的得到吗

qq聊天记录和聊天的人都删除了,在另一台电脑上还看的得到吗肯定看不到的,如果你曾经用手机上过的话,在手机上可能还能看到一部分我的qq聊天记录删除了,我想在另一台电脑上查看聊天记录,怎么办?聊天记录都是

知识大全 java聊天窗口的实现

  编写一数据报通信程序实现简单的聊天功能    聊天内容和输入文本分别为当前聊天的历史信息和当前要传送出去的聊天文本确定清空退出三个按钮分别实现发送当前聊天文本清空当前聊天文本和退出系统的功能imp

知识大全 Java Applet 编 程 技 巧

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