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基础将Bean属性值放入Map中的实例

    Java基础将Bean属性值放入Map中的实例

    这篇文章主要介绍了Java基础将Bean属性值放入Map中的实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • 详解SpringBoot构建Docker镜像的3种方式

    详解SpringBoot构建Docker镜像的3种方式

    这篇文章主要介绍了SpringBoot构建Docker镜像的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 解决Springboot-application.properties中文乱码问题

    解决Springboot-application.properties中文乱码问题

    这篇文章主要介绍了解决Springboot-application.properties中文乱码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解Java的类加载机制及热部署的原理

    详解Java的类加载机制及热部署的原理

    今天我要讲的就是Java的热部署的原理,由于热部署的原理和类的加载机制有关,所以打算讲一下类加载的机制,文中介绍的非常详细,需要的朋友可以参考下
    2021-05-05
  • Java实现Dijkstra输出最短路径的实例

    Java实现Dijkstra输出最短路径的实例

    这篇文章主要介绍了Java实现Dijkstra输出最短路径的实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Java泛型之类型擦除实例详解

    Java泛型之类型擦除实例详解

    Java泛型在使用过程有诸多的问题,如不存在List<String>.class,List<Integer>不能赋值给List<Number>(不可协变),奇怪的ClassCastException等,这篇文章主要给大家介绍了关于Java泛型之类型擦除的相关资料,需要的朋友可以参考下
    2022-01-01
  • springmvc+spring+mybatis实现用户登录功能(上)

    springmvc+spring+mybatis实现用户登录功能(上)

    这篇文章主要为大家详细介绍了springmvc+spring+mybatis实现用户登录功能,比较基础的学习教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Java创建多线程局域网聊天室实例

    Java创建多线程局域网聊天室实例

    这篇文章主要介绍了Java创建多线程局域网聊天室实例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • springboot实现rabbitmq的队列初始化和绑定

    springboot实现rabbitmq的队列初始化和绑定

    这篇文章主要介绍了springboot实现rabbitmq的队列初始化和绑定,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 如何将Object类转换为实体类

    如何将Object类转换为实体类

    这篇文章主要介绍了如何将Object类转换为实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论