加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java聊天室的实现代码

发布时间:2020-12-14 19:46:39 所属栏目:Java 来源:网络整理
导读:本文实例为大家分享了java实现聊天室的具体代码,供大家参考,具体内容如下 聊天室界面: 源码: public class ClientFrame extends Frame { private TextField textFieldContent = new TextField(); private TextArea textAreaContent = new TextArea(); pr

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

聊天室界面:

源码:

public class ClientFrame extends Frame {

 private TextField textFieldContent = new TextField();
 private TextArea textAreaContent = new TextArea();
 private Socket socket = null;
 private OutputStream out = null;
 private DataOutputStream dos = null;
 private InputStream in = null;
 private DataInputStream dis = null;
 private boolean flag = false;

 /**
  * 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:19:51 功能:启动客户端程序
  * 
  * @param args
  */
 public static void main(String[] args) {
  new ClientFrame().init();
 }

 /**
  * 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:20:43 功能:对窗口进行初始化
  */
 private void init() {
  this.setSize(300,300);
  setLocation(250,150);
  setVisible(true);
  setTitle("WeChatRoom");

  // 添加控件
  this.add(textAreaContent);
  this.add(textFieldContent,BorderLayout.SOUTH);
  textAreaContent.setFocusable(false);
  pack();

  // 关闭事件
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.out.println("用户试图关闭窗口");
    disconnect();
    System.exit(0);
   }

  });
  // textFieldContent添加回车事件
  textFieldContent.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    onClickEnter();
   }
  });

  // 建立连接
  connect();
  new Thread(new ReciveMessage()).start();
 }

 private class ReciveMessage implements Runnable {
  @Override
  public void run() {
   flag = true;
   try {
    while (flag) {
     String message = dis.readUTF();
     textAreaContent.append(message + "n");
    }
   } catch (EOFException e) {
    flag = false;
    System.out.println("客户端已关闭");
    // e.printStackTrace();
   } catch (SocketException e) {
    flag = false;
    System.out.println("客户端已关闭");
    // e.printStackTrace();
   } catch (IOException e) {
    flag = false;
    System.out.println("接受消息失败");
    e.printStackTrace();
   }
  }

 }

 /**
  * 功能:当点击回车时出发的事件 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:49:30
  */
 private void onClickEnter() {
  String message = textFieldContent.getText().trim();
  if (message != null && !message.equals("")) {
   String time = new SimpleDateFormat("h:m:s").format(new Date());
   textAreaContent.append(time + "n" + message + "n");
   textFieldContent.setText("");
   sendMessageToServer(message);
  }
 }

 /**
  * 功能:给服务器发送消息 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:13:48
  * 
  * @param message
  */
 private void sendMessageToServer(String message) {
  try {
   dos.writeUTF(message);
   dos.flush();
  } catch (IOException e) {
   System.out.println("发送消息失败");
   e.printStackTrace();
  }
 }

 /**
  * 功能:申请socket链接 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:00:38
  */
 private void connect() {
  try {
   socket = new Socket("localhost",8888);
   out = socket.getOutputStream();
   dos = new DataOutputStream(out);
   in = socket.getInputStream();
   dis = new DataInputStream(in);
  } catch (UnknownHostException e) {
   System.out.println("申请链接失败");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("申请链接失败");
   e.printStackTrace();
  }
 }

 /**
  * 功能:关闭流和链接 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:01:32
  */
 private void disconnect() {
  flag = false;
  if (dos != null) {
   try {
    dos.close();
   } catch (IOException e) {
    System.out.println("dos关闭失败");
    e.printStackTrace();
   }
  }
  if (out != null) {
   try {
    out.close();
   } catch (IOException e) {
    System.out.println("dos关闭失败");
    e.printStackTrace();
   }
  }
  if (socket != null) {
   try {
    socket.close();
   } catch (IOException e) {
    System.out.println("socket关闭失败");
    e.printStackTrace();
   }
   ;
  }
 }

}
package com.chat;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

public class ChatServer {

 private List<Client> clients = new ArrayList<>();

 /**
  * 功能:启动ChatSever 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:26:41
  * 
  * @param args
  */
 public static void main(String[] args) {
  new ChatServer().init();
 }

 /**
  * 功能:对chatserver初始化 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:27:09
  */
 private void init() {
  System.out.println("服务器已开启");
  // BindException

  ServerSocket ss = null;
  Socket socket = null;
  try {
   ss = new ServerSocket(8888);
  } catch (BindException e) {
   System.out.println("端口已被占用");
   e.printStackTrace();
  } catch (IOException e1) {
   e1.printStackTrace();
  }
  try {
   Client client = null;
   while (true) {
    socket = ss.accept();
    System.out.println("客户驾到");
    client = new Client(socket);
    clients.add(client);
    new Thread(client).start();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 private class Client implements Runnable {
  private Socket socket = null;
  InputStream in = null;
  DataInputStream din = null;
  OutputStream out = null;
  DataOutputStream dos = null;
  boolean flag = true;

  public Client(Socket socket) {
   this.socket = socket;
   try {
    in = socket.getInputStream();
    din = new DataInputStream(in);
   } catch (IOException e) {
    System.out.println("接受消息失败");
    e.printStackTrace();
   }

  }

  public void run() {

   String message;
   try {
    while (flag) {
     message = din.readUTF();
     // System.out.println("客户说:" + message);
     forwordToAllClients(message);
    }
   } catch (SocketException e) {
    flag = false;
    System.out.println("客户下线");
    clients.remove(this);
    // e.printStackTrace();
   } catch (EOFException e) {
    flag = false;
    System.out.println("客户下线");
    clients.remove(this);
    // e.printStackTrace();
   } catch (IOException e) {
    flag = false;
    System.out.println("接受消息失败");
    clients.remove(this);
    e.printStackTrace();
   }

   if (din != null) {
    try {
     din.close();
    } catch (IOException e) {
     System.out.println("din关闭失败");
     e.printStackTrace();
    }
   }
   if (in != null) {
    try {
     in.close();
    } catch (IOException e) {
     System.out.println("din关闭失败");
     e.printStackTrace();
    }
   }
   if (socket != null) {
    try {
     socket.close();
    } catch (IOException e) {
     System.out.println("din关闭失败");
     e.printStackTrace();
    }
   }

  }

  /**
   * 功能:转发给所有客户端 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午11:11:59
   * 
   * @param message
   * @throws IOException
   */
  private void forwordToAllClients(String message) throws IOException {
   for (Client c : clients) {
    if (c != this) {
     out = c.socket.getOutputStream();
     dos = new DataOutputStream(out);
     forwordToClient(message);
    }
   }
  }

  /**
   * 功能:发送给一个客户端 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午11:16:12
   * 
   * @throws IOException
   */
  private void forwordToClient(String message) throws IOException {
   dos.writeUTF(message);
   dos.flush();
   System.out.println("转发成功!");
  }

 }
}

源码下载:java聊天室代码

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

您可能感兴趣的文章:

  • Java GUI编程实现在线聊天室
  • java实现简单聊天室单人版
  • Java基于Tcp/ip连接的多人交互聊天室
  • java socket实现聊天室 java实现多人聊天功能
  • 使用Java和WebSocket实现网页聊天室实例代码
  • Java基于socket实现简易聊天室实例
  • java实现一个简单TCPSocket聊天室功能分享
  • 基于java编写局域网多人聊天室
  • Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
  • java编程实现多人聊天室功能

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读