全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java利用Socket实现聊天室功能实例

最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人。

目录结构:

ChatClient:

package com.panda.chat; 
 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
 
@SuppressWarnings("serial") 
public class ChatClient extends Frame { 
 private TextArea ta = new TextArea(); 
 private TextField tf = new TextField(); 
 private DataOutputStream dos = null; 
 private DataInputStream dis = null; 
 private Socket socket = null; 
 private boolean bConnected = false; 
 private Thread thread=null; 
 public static void main(String[] args) { 
  new ChatClient().frameClient(); 
 } 
 public void frameClient(){ 
  setSize(400, 400); 
  setLocation(400,300); 
  add(ta,BorderLayout.NORTH); 
  add(tf,BorderLayout.SOUTH); 
  pack(); 
  tf.addActionListener(new TfListener()); 
  //关闭窗口事件监听 
  this.addWindowListener(new WindowAdapter() { 
   @Override 
   public void windowClosing(WindowEvent e) { 
    disconnected(); 
    System.exit(0); 
   } 
  }); 
  this.connect(); 
  setVisible(true); 
 } 
 //链接服务器地址 
 private void connect(){ 
  try { 
   socket = new Socket("127.0.0.1", 8888); 
   thread=new Thread(new ChatThread()); 
   thread.start(); 
   dos = new DataOutputStream(socket.getOutputStream()); 
   dis = new DataInputStream(socket.getInputStream()); 
  } catch (UnknownHostException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } catch (IOException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
 //断开连接 
 private void disconnected(){ 
  bConnected = false; 
  try { 
   dos.close(); 
   dis.close(); 
   socket.close(); 
  } catch (IOException e1) { 
   // TODO Auto-generated catch block 
   e1.printStackTrace(); 
  } 
 } 
 //键盘回车事件 
 private class TfListener implements ActionListener{ 
 
  @Override 
  public void actionPerformed(ActionEvent e) { 
   String strMsg = tf.getText(); 
   tf.setText(""); 
   try { 
    dos.writeUTF(strMsg); 
    dos.flush(); 
   } catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
   } 
  } 
   
 } 
 //开启线程接受服务器信息 
 private class ChatThread implements Runnable{ 
  @Override 
  public void run() { 
   try { 
    bConnected = true; 
    while(bConnected){ 
     String msg = dis.readUTF(); 
     String taText = ta.getText(); 
     ta.setText(taText+msg+"\n"); 
    } 
   } catch (SocketException e) { 
    System.out.println("退出");; 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
  } 
 } 
} 

ChatServer:

package com.panda.chat; 
 
import java.io.*; 
import java.net.*; 
import java.util.*; 
 
public class ChatServer { 
 private boolean started = false; 
 private List<ChatThread> chatThreads = new ArrayList<ChatThread>(); 
 public static void main(String[] args) { 
  new ChatServer().startServer(); 
 } 
 private void startServer(){ 
  try { 
   //开启服务端Socket 
   ServerSocket seso = new ServerSocket(8888); 
   started = true; 
   while(started){ 
    //接受客户端连接请求 
    Socket sos = seso.accept(); 
    System.out.println("一个客户端已连接"); 
    //开启线程处理客户端通信 
    ChatThread ct = new ChatThread(sos); 
    chatThreads.add(ct); 
    new Thread(ct).start(); 
   } 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
 } 
 private class ChatThread implements Runnable{ 
  private Socket socket; 
  private DataInputStream din=null; 
  private DataOutputStream don=null; 
  private boolean bConnected = false; 
  public ChatThread(Socket socket) { 
   super(); 
   this.socket = socket; 
  } 
  //发送信息的函数 
  private void send(String strMsgIn){ 
   try{ 
    don.writeUTF(strMsgIn); 
    don.flush(); 
   }catch(IOException e){ 
    e.printStackTrace(); 
   } 
  } 
  @Override 
  public void run() { 
   try{ 
    din = new DataInputStream(socket.getInputStream()); 
    don = new DataOutputStream(socket.getOutputStream()); 
    //读取数据 
    bConnected = true; 
    while(bConnected){ 
     String strMsgIn = din.readUTF(); 
     System.out.println(strMsgIn); 
     //接收到数据后发送给每个客户端 
     for(int i =0;i<chatThreads.size();i++){ 
      chatThreads.get(i).send(strMsgIn); 
     } 
    } 
   }catch (IOException e) { 
    try { 
     //如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程 
     socket.close(); 
     chatThreads.remove(this); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
   } finally{ 
    try { 
     din.close(); 
     don.close(); 
     socket.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
   } 
  } 
  
 } 
} 

运行ChatSever后,再同时打开多次ChatClient,就可以实现多人聊天了,你也试试。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # socket做聊天室  # java实现聊天室  # socket实现聊天室  # 使用Java和WebSocket实现网页聊天室实例代码  # java socket实现聊天室 java实现多人聊天功能  # Java基于socket实现简易聊天室实例  # java实现一个简单TCPSocket聊天室功能分享  # Java Socket聊天室编程(一)之利用socket实现聊天之消息推送  # Java Socket聊天室编程(二)之利用socket实现单聊聊天室  # 用java WebSocket做一个聊天室  # 基于Tomcat7、Java、WebSocket的服务器推送聊天室实例  # Java编程实现基于TCP协议的Socket聊天室示例  # Java基于Socket实现多人聊天室  # 客户端  # 的人  # 你也  # 希望能  # 有兴趣  # 关闭窗口  # 服务端  # 大家多多  # 移除  # 就可以  # 实现了  # 发送给  # 聊天室  # void  # static  # args  # frameClient  # String  # main  # thread 


相关文章: Python文件管理规范_工程实践说明【指导】  ,巨量百应是干嘛的?  ,交易猫的商品怎么发布到网站上去?  宝塔面板如何快速创建新站点?  如何挑选优质建站一级代理提升网站排名?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  建站之星后台密码遗忘?如何快速找回?  如何选择PHP开源工具快速搭建网站?  制作销售网站教学视频,销售网站有哪些?  教学网站制作软件,学习*后期制作的网站有哪些?  ,在苏州找工作,上哪个网站比较好?  如何自定义建站之星网站的导航菜单样式?  如何快速使用云服务器搭建个人网站?  兔展官网 在线制作,怎样制作微信请帖?  大连 网站制作,大连天途有线官网?  如何通过商城自助建站源码实现零基础高效建站?  如何通过cPanel快速搭建网站?  如何彻底删除建站之星生成的Banner?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站主机如何选?性能与价格怎样平衡?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  网页设计与网站制作内容,怎样注册网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何通过万网虚拟主机快速搭建网站?  建站之星如何快速更换网站模板?  如何快速搭建高效WAP手机网站吸引移动用户?  *服务器网站为何频现安全漏洞?  建站之星后台密码如何安全设置与找回?  制作旅游网站html,怎样注册旅游网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  建站之星代理如何优化在线客服效率?  代购小票制作网站有哪些,购物小票的简要说明?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  javascript中的try catch异常捕获机制用法分析  如何在建站宝盒中设置产品搜索功能?  安云自助建站系统如何快速提升SEO排名?  ppt制作免费网站有哪些,ppt模板免费下载网站?  宝塔建站后网页无法访问如何解决?  如何用VPS主机快速搭建个人网站?  html制作网站的步骤有哪些,iapp如何添加网页?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  网站微信制作软件,如何制作微信链接?  宁波自助建站系统如何快速打造专业企业网站?  如何通过VPS建站无需域名直接访问?  简历在线制作网站免费版,如何创建个人简历? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。