java实现一个简单TCPSocket聊天室功能分享

 更新时间:2020年07月28日 15:20:07   作者:小小小丑  
这篇文章主要为大家分享了java实现的一个简单TCPSocket聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下

1.TCPserver.java

import java.net.*;
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
public class TCPserver{
 private static final int SERVERPORT = 8888;
 private ServerSocket MyServer = null;
 private List<Socket> Clients = new ArrayList<Socket>();
 private ExecutorService mExecutorService;
 public TCPserver(){
  try{
   MyServer = new ServerSocket(SERVERPORT);
   mExecutorService = Executors.newCachedThreadPool(); 
   System.out.println("start:");
   Socket MySocket = null;
   while(true){
   MySocket = MyServer.accept();
   Clients.add(MySocket);
   mExecutorService.execute(new ThreadServer(MySocket)); 
   }
  }catch(Exception e){
    e.printStackTrace(); 
    System.exit(0);
   }
 }
 class ThreadServer implements Runnable{
  private Socket msocket=null;
  private BufferedReader in= null;
  private PrintWriter out = null;
  private String mStrMSG = null; 
  public ThreadServer(Socket socket) {
   try{   
   this.msocket=socket;
   in = new BufferedReader(new InputStreamReader(msocket.getInputStream(), "GB2312"));
   mStrMSG = "user:" + msocket.getInetAddress() + " come total:" + Clients.size(); 
   SendMassage();
   }catch(IOException e){
    System.out.println("erorr");
    System.exit(0);
   }
  }
  private void SendMassage(){
   try{
    System.out.println(mStrMSG);
    for(Socket MySocket:Clients)
    {
    out = new PrintWriter(new OutputStreamWriter(MySocket.getOutputStream(),"GB2312"),true);
    out.println(mStrMSG);
    }
   }catch(IOException e){
    System.out.println("erorr");
    System.exit(0);
   }
  }
  public void run(){
   try{
    while((mStrMSG = in.readLine())!=null){
     if(mStrMSG.trim().equals("exit")){
      Clients.remove(msocket);
      in.close();
      out.close();
      mStrMSG = "user:" + msocket.getInetAddress() + " exit tatal:" + Clients.size();      ;
      msocket.close();
      SendMassage();      
      break; 
     } 
     else{
      mStrMSG = msocket.getInetAddress()+":" + mStrMSG; 
      SendMassage();
     }
     
    }
   }catch(IOException e){
    System.out.println("erorr");
    System.exit(0);
   }
    
  }
 }
 public static void main(String[] args){
  new TCPserver();
 }
}

2.TCPclient.java

import java.net.*;
import java.io.*;
import java.util.concurrent.*;
public class TCPclient {
 private static final int PORT = 8888;
 private Socket Client = null;
 private BufferedReader sin = null;
 private ExecutorService mExecutorService;
 public TCPclient(){
  try{
   Client = new Socket("120.27.126.174",PORT);
  sin = new BufferedReader(new InputStreamReader(Client.getInputStream(),"GB2312"));
  mExecutorService = Executors.newCachedThreadPool();
  mExecutorService.execute(new ThreadClient(Client)); 
  String msg = null;
  while((msg = sin.readLine()) != null) { 
    System.out.println(msg); 
   } 
  }catch(IOException e){
      System.out.println(e.getMessage()); 
    }
   
 }
 class ThreadClient extends Thread{
  private Socket mSocket = null;
  private String msg = null;
  BufferedReader in = null;
  PrintWriter out = null;
   public ThreadClient(Socket socket){
    this.mSocket = socket;
   }
   public void run(){
    try{
     in = new BufferedReader(new InputStreamReader(System.in));
     out = new PrintWriter(new OutputStreamWriter(mSocket.getOutputStream(), "GB2312"), true);
     while(true){
     msg = in.readLine();
     out.println(msg);
      if(msg.trim().equals("exit")){
       in.close();
       out.close();
        mExecutorService.shutdownNow();    
      break;
      }
     }
    }catch(IOException e){
     System.out.println("see you");
     System.exit(0);
    }
   }
 }
 public static void main(String[] args){
  new TCPclient();
 }
}

以上就是java实现TCPSocket聊天室功能的代码,希望对大家的学习有所帮助。

相关文章

  • java 并发线程个数的如何确定

    java 并发线程个数的如何确定

    这篇文章主要介绍了java 并发线程个数的如何确定,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java构造函数的三种类型总结

    java构造函数的三种类型总结

    在本篇文章里小编给大家整理了一篇关于java构造函数的三种类型总结内容,有需要的朋友们可以学习参考下。
    2021-01-01
  • 解决线程并发redisson使用遇到的坑

    解决线程并发redisson使用遇到的坑

    这篇文章主要介绍了解决线程并发redisson使用遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中的List与Set转换方式

    Java中的List与Set转换方式

    Java中,List和Set是两种基本的集合类型,它们在允许重复元素、元素顺序、实现类以及性能方面有着明显的区别,List允许重复元素并保持元素插入的顺序,常见实现有ArrayList、LinkedList和Vector;Set不允许重复元素
    2024-11-11
  • Java实现短信验证码的示例代码

    Java实现短信验证码的示例代码

    Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,下面是用Java实现短信验证码的总结,感兴趣的可以了解一下
    2023-03-03
  • Java实现MD5加密算法方法例子

    Java实现MD5加密算法方法例子

    这篇文章主要给大家介绍了关于Java实现MD5加密算法方法的相关资料,MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上,需要的朋友可以参考下
    2023-10-10
  • SpringData JPA的常用语法汇总

    SpringData JPA的常用语法汇总

    Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作,下面这篇文章主要给大家介绍了关于SpringData JPA的常用语法,需要的朋友可以参考下
    2022-06-06
  • java构建树形结构的方式及如何组装树状结构数据

    java构建树形结构的方式及如何组装树状结构数据

    这篇文章主要介绍了在Java中构建树状数据结构的几种常见方法,包括递归、使用Map/HashMap以及基于Stream流的方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • 盘点Java中延时任务的多种实现方式

    盘点Java中延时任务的多种实现方式

    当需要一个定时发布系统通告的功能,如何实现? 当支付超时,订单自动取消,如何实现?其实这些问题本质都是延时任务的实现,本文为大家盘点了多种常见的延时任务实现方法,希望对大家有所帮助
    2022-12-12
  • Spring Boot整合Kafka+SSE实现实时数据展示

    Spring Boot整合Kafka+SSE实现实时数据展示

    本文主要介绍了Spring Boot整合Kafka+SSE实现实时数据展示
    2024-06-06

最新评论