这期内容当中小编将会给大家带来有关使用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; public static void main(String[] args) { new ClientFrame().init(); } 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(); } } } 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); } } private void sendMessageToServer(String message) { try { dos.writeUTF(message); dos.flush(); } catch (IOException e) { System.out.println("发送消息失败"); e.printStackTrace(); } } 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(); } } 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<>(); public static void main(String[] args) { new ChatServer().init(); } 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(); } } } private void forwordToAllClients(String message) throws IOException { for (Client c : clients) { if (c != this) { out = c.socket.getOutputStream(); dos = new DataOutputStream(out); forwordToClient(message); } } } private void forwordToClient(String message) throws IOException { dos.writeUTF(message); dos.flush(); System.out.println("转发成功!"); } } }
上述就是小编为大家分享的使用java怎么实现一个聊天室功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。