java聊天室(实训项目)

article/2025/10/23 5:14:26

这里是我们实训的一个关于java聊天室的项目,有需要的同学可以看看,私聊功能未完善。

话不多说,直接上代码。

服务器:

package ChatRoom;import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JComboBox;
import javax.swing.JToolBar;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JLayeredPane;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JInternalFrame;
import javax.swing.JDesktopPane;
import javax.swing.border.LineBorder;
import javax.swing.UIManager;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.awt.event.ActionEvent;public class fw {private JFrame frame;private JTextArea bt;private JList inline;private JTextField writeSth;private JTextField people;private JTextField serverDk;private JTextArea message2;private JButton clossButton;private JButton startButton;private JButton tiButton;private JButton setButton;private int max;private int dk;private boolean isStart=false;private ServerSocket ServerCocket;private JList userList;  private DefaultListModel listModel;private List<User> userlist=new ArrayList<User>();/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {fw window = new fw();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the application.*/public fw() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {frame = new JFrame();frame.setTitle("服务器");frame.setBounds(100, 100, 1105, 577);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);JLabel label = new JLabel("人数上限:");label.setBounds(0, 25, 90, 21);frame.getContentPane().add(label);JLabel label_2 = new JLabel("端口:");label_2.setBounds(290, 25, 54, 21);frame.getContentPane().add(label_2);startButton = new JButton("启动");startButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String maxTemp =people.getText();String Duanko =serverDk.getText();if(maxTemp.equals("")){JOptionPane.showMessageDialog(frame,"人数为空","警告",JOptionPane.WARNING_MESSAGE);return;}try{max=Integer.parseInt(maxTemp);}catch(NumberFormatException e1){JOptionPane.showMessageDialog(frame,"人数必须为数字","警告",JOptionPane.WARNING_MESSAGE);}if(max<=0){JOptionPane.showMessageDialog(frame,"人数要大于0","警告",JOptionPane.WARNING_MESSAGE);return;}if(max>1000){JOptionPane.showMessageDialog(frame,"人数已满","警告",JOptionPane.WARNING_MESSAGE);return;}
//				***************************************if(Duanko.equals("")){JOptionPane.showMessageDialog(frame,"端口为空","警告",JOptionPane.WARNING_MESSAGE);return;}try{dk=Integer.parseInt(Duanko);}catch(NumberFormatException e1){JOptionPane.showMessageDialog(frame,"端口必须为数字","警告",JOptionPane.WARNING_MESSAGE);}if(dk<=0){JOptionPane.showMessageDialog(frame,"端口要大于0","警告",JOptionPane.WARNING_MESSAGE);return;}//启动服务器try{dk=Integer.parseInt(Duanko);ServerCocket = new ServerSocket(dk);isStart=true;}catch(IOException e1){JOptionPane.showMessageDialog(frame,"启动","警告",JOptionPane.WARNING_MESSAGE);e1.printStackTrace();}OnlineThread onlineThread = new OnlineThread();onlineThread.start();startButton.setEnabled(false);clossButton.setEnabled(true);setButton.setEnabled(true);people.setEditable(false);serverDk.setEditable(false);}});startButton.setBounds(483, 21, 118, 29);frame.getContentPane().add(startButton);
//	关闭按钮	clossButton = new JButton("关闭");clossButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {for(User u:userlist){u.getWriter().println("CLOSE");u.getWriter().flush();try {u.getReader().close();u.getIn().close();u.getWriter();u.getOut().close();u.getSocket().close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}clossButton.setEnabled(false);startButton.setEnabled(true);setButton.setEnabled(false);people.setEditable(true);serverDk.setEditable(true);}});clossButton.setBounds(599, 21, 118, 29);clossButton.setEnabled(false);frame.getContentPane().add(clossButton);JLabel label_4 = new JLabel("被踢用户:");label_4.setBounds(782, 61, 90, 21);frame.getContentPane().add(label_4);bt = new JTextArea();bt.setBounds(874, 58, 96, 27);frame.getContentPane().add(bt);bt.setColumns(10);tiButton = new JButton("踢");tiButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String outName = bt.getText();if(!outName.equals("")) {listModel.removeElement(outName);//从在线列表中踢出OutputStream out;PrintWriter write;										try {for(User users:userlist) {//列遍每一个用户找到被踢用户,提出集合					if(users.getName().equals(outName)) {						String info_send = "ti@"+users.getName();		out =users.getSocket().getOutputStream();write = new PrintWriter(out);write.println(info_send);将信息写进字符缓冲区write.flush();//刷新该流的缓冲
//								bt.removeAll();users.interrupt();	for(User u:userlist) {//转发当前踢出消息到其他用户u.getWriter().println("out@"+outName);u.getWriter().flush();}message2.append("服务器:"+outName+"已被踢出聊天室\n");JOptionPane.showMessageDialog(null,outName+"已被踢出群聊", "服务器", JOptionPane.INFORMATION_MESSAGE);																}else {String info_send = "OFFLINE@"+outName;	out = users.getSocket().getOutputStream();write = new PrintWriter(out);write.println(info_send);将信息写进字符缓冲区write.flush();//刷新该流的缓冲}}} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}//返回此套接字的输出流。}else {JOptionPane.showMessageDialog(null,"请选择被踢用户", "服务器", JOptionPane.INFORMATION_MESSAGE);}}});tiButton.setBounds(978, 57, 51, 29);frame.getContentPane().add(tiButton);JLabel label_5 = new JLabel("未完待续……");label_5.setBounds(862, 230, 128, 21);frame.getContentPane().add(label_5);listModel = new DefaultListModel();  inline = new JList(listModel);inline.setBounds(20, 91, 179, 300);frame.getContentPane().add(inline);JPanel panel_4 = new JPanel();panel_4.setBorder(new TitledBorder(null, "在线用户", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel_4.setBounds(10, 69, 197, 335);frame.getContentPane().add(panel_4);writeSth = new JTextField();writeSth.setBounds(20, 444, 568, 43);writeSth.setText(null);frame.getContentPane().add(writeSth);writeSth.setColumns(10);setButton = new JButton("发送");setButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String message = writeSth.getText();for(User u:userlist){u.getWriter().println("ALL@SERVER@"+message);u.getWriter().flush();}message2.append("客服:"+message+"\n");writeSth.setText(null);setButton.setEnabled(true);}});setButton.setBounds(594, 444, 123, 43);setButton.setEnabled(false);frame.getContentPane().add(setButton);people = new JTextField();people.setText("2");people.setBounds(84, 22, 96, 27);frame.getContentPane().add(people);people.setColumns(10);serverDk = new JTextField();serverDk.setText("6666");serverDk.setBounds(335, 22, 96, 27);frame.getContentPane().add(serverDk);serverDk.setColumns(10);message2 = new JTextArea();message2.getText();message2.setBounds(268, 99, 433, 284);frame.getContentPane().add(message2);message2.setEditable(false);message2.setColumns(10);JPanel panel_1 = new JPanel();panel_1.setBorder(new TitledBorder(null, "消息显示框", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel_1.setBounds(249, 69, 468, 322);frame.getContentPane().add(panel_1);JPanel panel = new JPanel();panel.setBorder(new TitledBorder(null, "服务器功能操作", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel.setBounds(762, 25, 306, 481);frame.getContentPane().add(panel);JPanel panel_2 = new JPanel();panel_2.setBorder(new TitledBorder(null, "写消息", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel_2.setBounds(0, 419, 740, 76);frame.getContentPane().add(panel_2);}//建立线程处理客户端上线请求public class OnlineThread extends Thread{public void run(){System.out.println("---------处理客户端上线请求----------");while(isStart){try{System.out.println("---------1----------");Socket socket=ServerCocket.accept();InputStream in = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));OutputStream out = socket.getOutputStream();PrintWriter write = new PrintWriter(out);System.out.println("---------2----------");if(userlist.size()==max){System.out.println("---------3----------");write.println("MAX@在线人数已满");write.flush();write.close();out.close();reader.close();in.close();socket.close();}else{System.out.println("---------4----------");write.println("SUCCESS@连接成功@");write.flush();String info = reader.readLine();StringTokenizer st = new StringTokenizer(info,"@");String ip = st.nextToken();String name = st.nextToken();message2.append(info+"@上线\n");listModel.addElement(name);System.out.println("---------5----------"+info);//客户端接受线程User user = new User();user.setName(name);user.setIp(ip);user.setIn(in);user.setOut(out);user.setReader(reader);user.setWriter(write);user.setSocket(socket);ReceleThred receleThred = new ReceleThred(reader);receleThred.start();user.setReceiveThread(receleThred);userlist.add(user);//循环集合for(User users:userlist){if(users.getName().equals(name)){continue;}users.getWriter().println("ADD@"+name);System.out.println(name);users.getWriter().flush();}String onlist = "USERLIST@"+userlist.size();for(User us:userlist){onlist = onlist+"@"+us.getName();}//将信息发送给客户端write.println(onlist);write.flush();}}catch(IOException e){JOptionPane.showMessageDialog(frame,"上线失败","警告",JOptionPane.WARNING_MESSAGE);e.printStackTrace();}}}}public class ReceleThred extends Thread{private BufferedReader reader;private PrintWriter write;public ReceleThred(BufferedReader reader){this.reader=reader;}public ReceleThred(BufferedReader reader,PrintWriter write){this.reader=reader;this.write=write;}public void run(){boolean flag = true;while(flag){try {String info=reader.readLine();System.out.println("info:"+info);
//				  message2.append(name+"\n");
//				  message2.append(info+"\n");StringTokenizer st = new StringTokenizer(info,"@");String type = st.nextToken();if(type.equals("ALL")){//转发群聊for(User u:userlist){u.getWriter().println(info);u.getWriter().flush();System.out.println(info);}message2.append(st.nextToken()+"说:"+st.nextToken()+"\n");}else if(type.equals("DELETE")){//DELETE操作for(User u:userlist){u.getWriter().println(info);u.getWriter().flush();}//释放资源String name = st.nextToken();for(User u:userlist){if(u.getName().equals(name)){u.getReader().close();u.getIn().close();u.getWriter();u.getOut().close();u.getSocket().close();userlist.remove(u);break;}}flag = false;listModel.removeElement(name);
//					  listModel.removeAllElements();listModel.addElement(name);message2.append(name+"下线\n");write.println("DELETE@"+info);write.flush();}
//				  for(User u1:userlist){
//						if(u1.getName().equals(info)){
//							continue;
//						}
//						u1.getWriter().println("ADD@"+info);
//						System.out.println(info);
//						u1.getWriter().flush();
//					}} catch (IOException e) {JOptionPane.showMessageDialog(frame,"发送失败","警告",JOptionPane.WARNING_MESSAGE);e.printStackTrace();} }}}
}

客户端:

package ChatRoom;import java.awt.EventQueue;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.JProgressBar;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JLayeredPane;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.rmi.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.awt.event.ActionEvent;public class kh {private JFrame frame;private JTextField WriteQ;private JTextArea names;private JTextField serverIp;private JTextField duanKo;private JPanel panel;private JList inline;private JTextArea viewQ;private JPanel panel_1;private JPanel panel_2;private JButton liveButton;private JButton linkButton;private JButton setButton;private int dk2;private boolean isConn=false;private Socket socket;private OutputStream out ;private PrintWriter writer;private String name;private boolean flag=true;private BufferedReader reader;private InputStream in;private JList userList;  private DefaultListModel listModel;private List<User> userlist=new ArrayList<User>();/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {kh window = new kh();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the application.*/public kh() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {frame = new JFrame();frame.setTitle("客户端");frame.setBounds(100, 100, 1105, 569);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);JLabel label = new JLabel("姓名:");label.setBounds(15, 25, 81, 21);frame.getContentPane().add(label);JLabel lblip = new JLabel("服务器IP:");lblip.setBounds(237, 25, 99, 21);frame.getContentPane().add(lblip);JLabel label_1 = new JLabel("端口:");label_1.setBounds(507, 25, 81, 21);frame.getContentPane().add(label_1);linkButton = new JButton("连接");linkButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("---------上线按钮点击----------");name =names.getText();String fuwuqi =serverIp.getText();String Duanko =duanKo.getText();String ip=fuwuqi;int port=Integer.parseInt(Duanko);try {socket =new Socket(ip,port);out =socket.getOutputStream();writer=new PrintWriter(out);in = socket.getInputStream();reader = new BufferedReader(new InputStreamReader(in));//3.告诉服务器我是谁writer.println(socket.getInetAddress().getHostAddress()+"@"+name);writer.flush();//接受服务器消息ReceleThred receleThred = new ReceleThred(reader);receleThred.start();//					User user = new User();
//					for(User u:userlist){
//						
//					}//4.按钮处理}catch(UnknownHostException e1){e1.printStackTrace();} catch (IOException e1) {// TODO: handle exceptione1.printStackTrace();}if(name.equals("")){JOptionPane.showMessageDialog(frame,"姓名不能为空","警告",JOptionPane.WARNING_MESSAGE);return;}
//				****************************if(fuwuqi.equals("")){JOptionPane.showMessageDialog(frame,"服务器输入不能为空","警告",JOptionPane.WARNING_MESSAGE);return;}
//				****************************if(Duanko.equals("")){JOptionPane.showMessageDialog(frame,"端口为空","警告",JOptionPane.WARNING_MESSAGE);return;}try{dk2=Integer.parseInt(Duanko);}catch(NumberFormatException e2){JOptionPane.showMessageDialog(frame,"端口必须为数字","警告",JOptionPane.WARNING_MESSAGE);}if(dk2<=0){JOptionPane.showMessageDialog(frame,"端口要大于0","警告",JOptionPane.WARNING_MESSAGE);return;}linkButton.setEnabled(false);liveButton.setEnabled(true);setButton.setEnabled(true);names.setEditable(false);serverIp.setEditable(false);duanKo.setEditable(false);}});linkButton.setBounds(727, 21, 123, 29);frame.getContentPane().add(linkButton);liveButton = new JButton("断开");liveButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//告诉服务器下线writer.println("DELETE@"+name);writer.flush();try{writer.close();out.close();reader.close();in.close();socket.close();//线程循环标志设置flag=false;listModel.removeAllElements();}catch(IOException e1){e1.printStackTrace();}liveButton.setEnabled(false);linkButton.setEnabled(true);setButton.setEnabled(false);names.setEditable(true);serverIp.setEditable(true);duanKo.setEditable(true);}});liveButton.setBounds(865, 21, 123, 29);liveButton.setEnabled(false);frame.getContentPane().add(liveButton);WriteQ = new JTextField();WriteQ.setBounds(15, 439, 776, 44);frame.getContentPane().add(WriteQ);WriteQ.setColumns(10);setButton = new JButton("发送");setButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//取String info = WriteQ.getText();//写writer.println("ALL@"+name+"@"+info);writer.flush();
//				viewQ.append(name+":"+info+"\n");WriteQ.setText(null);}});setButton.setBounds(803, 439, 123, 44);setButton.setEnabled(false);frame.getContentPane().add(setButton);names = new JTextArea();names.setBounds(74, 23, 96, 27);frame.getContentPane().add(names);names.setColumns(10);serverIp = new JTextField();serverIp.setText("127.0.0.1");serverIp.setBounds(320, 22, 96, 27);frame.getContentPane().add(serverIp);serverIp.setColumns(10);duanKo = new JTextField();duanKo.setText("6666");duanKo.setBounds(552, 22, 96, 27);frame.getContentPane().add(duanKo);duanKo.setColumns(10);panel = new JPanel();panel.setBorder(new TitledBorder(null, "写消息", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel.setBounds(0, 407, 946, 91);frame.getContentPane().add(panel);listModel = new DefaultListModel();  inline = new JList(listModel);inline.setBounds(26, 105, 183, 279);frame.getContentPane().add(inline);viewQ = new JTextArea();viewQ.getText();viewQ.setBounds(272, 105, 736, 279);frame.getContentPane().add(viewQ);viewQ.setEditable(false);viewQ.setColumns(10);panel_1 = new JPanel();panel_1.setBorder(new TitledBorder(null, "在线用户", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel_1.setBounds(0, 77, 230, 317);frame.getContentPane().add(panel_1);panel_2 = new JPanel();panel_2.setBorder(new TitledBorder(null, "消息显示区", TitledBorder.LEADING, TitledBorder.TOP, null, null));panel_2.setBounds(255, 77, 776, 317);frame.getContentPane().add(panel_2);}//接受服务端信息public class ReceleThred extends Thread{private BufferedReader reader;public ReceleThred(BufferedReader reader){this.reader=reader;}public void run(){
//			 flag = true;while(flag){try {String info=reader.readLine();
//				  System.out.println("info:"+info);
//				  viewQ.append(info+"\n");
//				  listModel.addElement(name);StringTokenizer st = new StringTokenizer(info,"@");String type = st.nextToken();if(type.equals("ALL")){viewQ.append(st.nextToken()+"说:"+st.nextToken()+"\n");}else if(type.equals("USERLIST")){int no = Integer.parseInt(st.nextToken());for(int i=0;i<no;i++){String name = st.nextToken();listModel.addElement(name);}}else if(type.equals("ADD")){String username=st.nextToken();String name=names.getText();if(!(name.equals(username))){listModel.addElement(username);viewQ.append(username+"上线"+"\n");}}else if(type.equals("SUCCESS")){String mess = st.nextToken();viewQ.append(mess+"\n");}else if(type.equals("MAX")){String mess = st.nextToken();viewQ.append(mess);writer.close();out.close();reader.close();in.close();socket.close();flag=false;}else if(type.equals("DELETE")){//退出String names = st.nextToken();listModel.removeElement(names);viewQ.append(names+"下线\n");}else if(type.equals("CLOSE")){//关闭writer.close();out.close();reader.close();in.close();socket.close();flag=true;viewQ.append("服务器下线\n");listModel.removeAllElements();}else if(type.equals("out")){String outName = st.nextToken();listModel.removeElement(outName);viewQ.append(outName+"已被踢出群聊\n");}} catch (IOException e) {JOptionPane.showMessageDialog(frame,"成功下线","警告",JOptionPane.WARNING_MESSAGE);e.printStackTrace();} }}}
}

 结果展示:

在布局时,建议大家在eclipse使用WindowBuilder插件,更快更简洁。

(注:代码可做参考,可能有许多不规范的地方,还请见谅)


http://chatgpt.dhexx.cn/article/KZHMjm6y.shtml

相关文章

Java实现简易聊天室

Java实现简易聊天室 在学习《Java从入门到精通》这本书&#xff0c;网络通信&#xff0c;基于TCP实现的简易聊天室&#xff0c;我这里对书中的代码略做了修改&#xff0c;做个记录。 这里先放一下运行效果图&#xff0c;代码放在最后。 运行效果&#xff1a; 先启动服务器端&am…

javaWeb实现聊天室(私聊+群聊)

写在前面 近几天&#xff0c;迎来了第一个小项目&#xff0c;不做不知道&#xff0c;一做吓一跳。好多知识都掌握的不够扎实&#xff0c;看似会了&#xff0c;但其实似懂非懂&#xff0c;不能真正掌握原理&#xff0c;导致使用起来错误百出。而且深深体会到&#xff0c;知识只有…

java实现聊天室(GUI界面+私聊+群聊)

登录界面的用户名和端口号不能重复&#xff01; 登录界面的用户名和端口号不能重复&#xff01; 登录界面的用户名和端口号不能重复&#xff01; java的socket编写的聊天室&#xff0c;GUI的界面&#xff0c;可以私聊和群聊&#xff0c; 聊天信息保存为txt 有需要的可以自行下…

用Java代码实现一个简单的聊天室功能

一.客户端的创建 1.我们可以用Socket来创建客户端 /***类名 Client*描述 TODO 客户端 1*版本 1.0*创建人 XuKang*创建时间 2020/9/24 16:18**/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println(…

Java在线聊天室(客户端+服务器)

Java在线聊天室&#xff08;客户端服务器&#xff09;基于webSocket实现模拟在线聊天系统 运行环境&#xff1a; JDK1.8version 开发环境&#xff1a;Eclipse 一、结构 以下是系统主要结构&#xff1a; 1.用户&#xff08;均实现部分可能会有bug&#xff09; &#xff08;…

apiDay09整理笔记(笔记优化)

目录 1.聊天室&#xff08;续&#xff09; &#xff08;1&#xff09;实现服务端发送消息给客户端 &#xff08;2&#xff09;服务端转发消息给所有客户端 &#xff08;3&#xff09;客户端解决收发消息的冲突问题 &#xff08;4&#xff09;服务端完成处理客户端断开连接…

JAVA简单聊天室的实现

目录 界面效果图 一、聊天室功能介绍&#xff1f; 二、功能代码 1.服务端 2.客户端 界面效果图 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、聊天室功能介绍&#xff1f; 1. 、对于聊天室就是处理多个客户端发送的请求与信息&#xff0c;从…

Java网络聊天室---个人博客

Java网络聊天室 ———个人博客 一、项目简介 功能描述&#xff1a; 使用图形用户界面和socket通信&#xff0c;能实现一个聊天室中多人聊天&#xff0c;可以两人私聊&#xff0c;可以发送文件。 实现类似QQ用户注册、登录、聊天等功能。 参考git地址或博客地址&#xff1a…

Java实现ChatRoom

基于连接通信Socket、多线程的Java聊天室 1、开发环境&#xff1a; IDEA2018.1JDK1.8 2、实现功能&#xff1a; 实现了模拟登录注册、群聊、私聊、显示当前在线人数列表&#xff1b; 在发送信息时&#xff0c;会向对方发送者及显示发送时间&#xff1b; 显示在线人数列表…

Java聊天室

项目介绍&#xff1a; Java聊天室是期末设计&#xff0c; 阿里巴巴druidmysql多线程GUImvn项目java Socket 服务端模块&#xff1a;踢出聊天室&#xff1a;管理员可以踢出发言不当的用户。只有当开启服务端的时候&#xff0c;客户端才能起到作用。 客户端模块&#xff1a; 注册…

用Java实现简易聊天室

说明&#xff1a;如果一个 类&#xff0c;需要有界面的显示&#xff0c;那么该类就需要继承自JFrame&#xff0c;此时&#xff0c;该类就可以被称为一个“窗体类"。 服务端代码&#xff1a; package cn.qy.chat;import javax.swing.*; import java.awt.*; import java.aw…

微信小程序购物车功能实现(干货满满)

微信小程序定制好看的购物车页面&#xff0c;实现购物车功能&#xff0c;希望对您有所帮助&#xff01; 1. 应用场景 2. 思路分析 3. 代码分析 4. 具体实现代码 效果截图&#xff1a; 1.应用场景 适用于商城、秒杀、商品购买等类型的小程序&#xff0c;负责将顾客浏览的商…

微信小程序微商城(八):缓存实现商品购物车功能

IT实战联盟博客&#xff1a;http://blog.100boot.cn 上一篇&#xff1a;微信小程序微商城&#xff08;七&#xff09;&#xff1a;动态API实现商品分类 看效果 购物车.gif 开发计划 1、商品详情页将商品信息放入缓存 2、购物车页面读取缓存获取商品信息 3、购物车商品计算…

微信小程序开发一个小型商城(六、购物车页面)

上一篇文章&#xff1a;微信小程序开发一个小型商城&#xff08;五、商品详情&#xff09; 当我们在商品详情界面中点击添加购物后&#xff0c;会跳转到购物车界面&#xff0c;购物车界面是一个tabbar&#xff0c;在跳转的时候需要加上ope-type。看下购物车的静态页面把&#x…

微信小程序实现一个购物车页面的简易列表效果

本文只是简单的模仿天猫APP的购物车列表的样式效果&#xff0c;并实现了部分事件功能&#xff0c;功能并不完善&#xff0c;请降低期待观看。 天猫APP的购物车效果&#xff1a; 小程序模仿的实现效果&#xff1a; wxml部分的代码&#xff1a; <view wx:if"{{!isCartEmp…

【Python之pymysql库学习】一、分析fetchone()、fetchmany()、fetchall()(保姆级图文+实现代码)

目录 实现效果实现思路实现代码总结 欢迎关注 『Python之pymysql库学习』 系列&#xff0c;持续更新中 欢迎关注 『Python之pymysql库学习』 系列&#xff0c;持续更新中 实现效果 实现思路 其实有半数代码是创建数据库和创建数据表并插入数据这些环境配置部分我都写好了&…

fetchone、fetchall

fetchone(): 该方法获取下一个查询结果集。结果集是一个对象,读取一行结果&#xff0c;读取完指向下一行&#xff0c;到空为止 fetchall():接收全部的返回结果行&#xff0c;到空为止 fetchone() &#xff1a; 返回单个的元组&#xff0c;也就是一条记录(row)&#xff0c;如果没…

python fetchall方法_Python连接MySQL并使用fetchall()方法过滤特殊字符

python3.3从mysql里取出的数据莫名其妙有括号和逗号每天跟自己喜欢的人一起&#xff0c;通电话&#xff0c;旅行&#xff0c;重复一个承诺和梦想&#xff0c;听他第二十八次提起童年往事&#xff0c;每年的同一天和他庆祝生日&#xff0c;每年的情人节圣诞节除夕&#xff0c;也…

pdo fetchAll

作用 fetchAll()方法是获取结果集中的所有行.其返回值是一个包含结果集中所有数据的二维数组。 PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument[, array$ctor_args array() ]]] ) fetch_style:控制结果的返回方式 PDO::FETCH_ASSOC 关联数组形式 PD…

记录一个常用函数fetchall()的使用过程

fetchall() 作用是返回多个元组&#xff0c;即对应数据库里的多条数据概念&#xff1b; 常见用法是 cursor.execute(‘select * from table’) value cursor.fetchall() 此时&#xff0c;print(value)则会输出以下二维元组&#xff0c;如下图 拓展&#xff1a; 同类函数fet…