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

所属分类: 软件编程 / java 阅读数: 39
收藏 0 赞 0 分享

本文实例为大家分享了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聊天室功能的代码,希望对大家的学习有所帮助。

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多