首页 > 编程 > Java > 正文

java聊天室的实现代码

2019-11-26 09:47:38
字体:
来源:转载
供稿:网友

本文实例为大家分享了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聊天室代码

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表