(JAVA)使用swing组件模仿QQ界面+网络编程实现QQ消息传输takfate

修改昵称,个性签名,生日,学校,公司,职业,所在地

修改状态

用户交互

添加好友

私聊

一对一聊天

云端存储

存储聊天记录

我使用的开发环境是Eclipse,jdk8.0,数据库使用Mysql。

序号

字段名

数据类型

长度

主键

允许空

默认值

说明

1

id

int

32

用户编号

2

accout

char

3

pasword

用户密码

4

nickname

64

用户昵称

5

autograph

128

用户个性签名

6

gender

tinyint

用户性别

7

birthday

date

-

用户生日

8

location

用户所在地

9

school

用户学校

10

company

用户公司

11

job

用户职业

12

statu

用户状态

13

create_time

datetime

好友编号

好友的id号

sender_id

发送者的id

content

varchar

256

消息内容

send_time

由于代码太长,大约有6500行,全部贴出来会占很大一部分空间,所以这里只讲一下很关键也很重要,并且有一点难点的实现。

1publicclassLoginRoundTextBoxextendsJTextField{2Colorbordercolor=UColor.InputDefaultBorderColor;3booleanCover=false;4publicvoidBorderHigh(){5bordercolor=UColor.InputCoverBorderColor;6Cover=true;7this.repaint();8}9publicvoidBorderLow(){10bordercolor=UColor.InputDefaultBorderColor;11Cover=false;12this.repaint();13}14protectedvoidpaintBorder(Graphicsg){15inth=getHeight();//从JComponent类获取高宽16intw=getWidth();17Graphics2Dg2d=(Graphics2D)g.create();18Shapeshape=g2d.getClip();19g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);20g2d.setClip(shape);21g2d.setColor(bordercolor);22if(Cover){23g2d.setStroke(newBasicStroke(1.8f));24}else{25g2d.setStroke(newBasicStroke(1.0f));26}27g2d.drawRoundRect(0,0,w-1,h-1,5,5);28g2d.dispose();29super.paintBorder(g2d);30}31}密码框的实现类似,只是需要继承JPasswordField。

1publicclassLoginHeadPanelextendsJPanel{2Imageimage=null;3publicLoginHeadPanel(){4this.setBounds(40,10,85,85);5image=newImageIcon(UImport.UserHeadPicture).getImage();6}7protectedvoidpaintComponent(Graphicsg){8intx=image.getWidth(this);9inty=image.getHeight(this);10g.drawImage(image,0,0,x,y,this);11}12}这是状态选择按钮的实现:

由于大部分软件的注册一般都是在网页中进行注册,这里再次模仿了网页中的设计,在文本框失焦时,进行合法判定并给出一定的提示或警告。

1midpane=newJTabbedPane();2midpane.setPreferredSize(newDimension(402,660));3midpane.setBorder(null);4midpane.setBackground(UColor.MainMidPanelTabgroundColor);5midpane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);6midpane.addTab(null,peopledefaulticon,mainmidpeoplepanel,UMap.MainPeople);7midpane.addTab(null,recentdefaulticon,mainmidrecentpanel,UMap.MainRecent);8midpane.setEnabledAt(1,false);9midpane.setSelectedIndex(0);10this.add(midpane,BorderLayout.CENTER);5.3.2好友列表我个人觉得这是整个前端中最难的,但是通过查阅资料,依然还是比较好的实现了这个界面,首先用JScrollPane打底,让面板可以自动增加滚动条进行滚动。其次,让JScrollPane用JTabel来显示,这样可以很方便的让每一个好友更像表格一样出现在列表中。

但是有个很大难点,怎么样让JTabel里每一个单元格显示3个组件:头像,昵称,个性签名。查阅了很多资料,并且深入内部感受了JTabel的绘制方式,想了一个很巧妙的方法来实现单元格多组件和鼠标覆盖单元格高亮。首先给JTabel添加一个自己继承出来的单元格渲染器TableCellRenderer,并且重写父类的getTableCellRendererComponent方法,其次给表格添加监听器监听鼠标的移动,一旦更换了单元格的位置,就重绘整个表格。

给表格加上MouseMotionListener监听器:

1table.addMouseMotionListener(newMouseMotionAdapter(){2publicvoidmouseMoved(MouseEvente){3intr=table.rowAtPoint(e.getPoint());4if(r!=MainUserCellRender.cover_r){5MainUserCellRender.cover_r=r;6table.repaint();7}8}9});单元格渲染器的继承:

原本并没有类似方法实现这种创意,网上的资料也是少之又少,不全或者直接没有。但是这里同样达到了较好的实现。

使用JSplitPane分割两个面板,并且可以通过拖动,改变两个面板的大小。使其更加人性化。

1JSplitPanejsplitpane=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,historytextpane,edittextpane);2jsplitpane.setDividerLocation(550);3this.add(jsplitpane,BorderLayout.CENTER);5.4.2气泡这个实现比较难,我这里的实现是使用JPanel作为JScrollPane的显示。扫描发送者输入的文本来计算所需要气泡的大小。

讲整个大面板横向分成多个JPanel,根据气泡的高度动态调整该Jpanel的高度。再在这个小的JPanel里根据发送者重新定位头像的位置和气泡的位置。设定一个最大宽度,遍历输入的所有信息,计算气泡需要的宽度和高度,将他放进小的JPanel中。

小JPanel的实现:

以注册界面的头部面板为例的实现:

1publicclassMouseDragListenerimplementsMouseInputListener{2Pointorigin;3//鼠标拖拽想要移动的目标组件4JFrameframe;5publicMouseDragListener(JFrameframe){6this.frame=frame;7origin=newPoint();8}9publicvoidmouseClicked(MouseEvente){10}11publicvoidmouseEntered(MouseEvente){12}13publicvoidmouseExited(MouseEvente){14this.frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));15}16publicvoidmousePressed(MouseEvente){17origin.x=e.getX();18origin.y=e.getY();19}20publicvoidmouseReleased(MouseEvente){21}22publicvoidmouseDragged(MouseEvente){23Pointp=this.frame.getLocation();24this.frame.setLocation(p.x+(e.getX()-origin.x),p.y+(e.getY()-origin.y));25}26publicvoidmouseMoved(MouseEventarg0){27}28}5.6数据设计5.6.1用户类客户端与服务端通用的用户类,用来传递用户的信息。

下面列出所有可能的信号:

SIGINAL

NAME

DETAIL

LOGIN

CHECK_EXIST

GET_VERIFICATIONCODE

服务器让邮件服务器发送邮件,并返回一个验证码。

REGISTER

注册信号,发送一个具有多个信息的user对象。服务器返回一个success表示是否注册成功。

CHANGEPASSWORD

修改密码信号,发送一个拥有账号和新密码的user对象。服务器返回一个success表示是否修改成功。

SEARCH

查找用戶信号,发送一个拥有账号的user对象。服务器返回一个success表示是否找到该用户。

ADDFRIEND

添加好友信号,发送一个拥有账号的user对象。服务器返回一个success表示是否添加好友成功。

FRUSHLIST

刷新好友列表信号,发送一个拥有账号的user对象。刷新成功,服务器返回一个vector,success=1,刷新失败,服务器返回success=0。

SAVEPROFILE

保存修改信息信号,发送一个完整的user对象。服务器返回一个success表示是否修改成功。

SENDINFO

发送消息信号,传送两个拥有账号的user对象。服务器返回一个success表示是否发送成功。

CHANGE_STATU

这里我们在Common包里定义了4个类用于这样的存储。

①颜色在前端设计中是必不可少的属性:

1publicclassUFont{2publicstaticFont[]font=newFont[26];3publicstaticvoidFontInit(){4Propertiesprops=System.getProperties();5String[]info=props.getProperty("os.name").split("");6if(info[0].equals("Windows")){7UImport.DefaultFont="font/微软雅黑.ttf";8}9for(inti=1;i<=25;i++){10font[i]=LoadFont.loadFont(UImport.DefaultFont,i);11}12}13}③外部文件的路径同样需要保存,因为我们很难记住,存下也不用每次去查看。

1Vectormainlist;迭代,向Jtabel中添加对象。

1publicvoidlocalfrushlist(){2DefaultTableModelmodel=newDefaultTableModel(0,1);3for(inti=0;i

1staticHashMapchatframe;1elseif(e.getClickCount()==2){2Useruserto=(User)table.getValueAt(r,c);3System.out.println(userto.getaccount()+""+userto.getnickname());4if(mainframe.getmap().get(userto.getaccount())==null){5ChatMainFramechatmainframe=newChatMainFrame(mainframe,userto);6mainframe.getmap().put(userto.getaccount(),chatmainframe);7}else{mainframe.getmap().get(userto.getaccount()).setAlwaysOnTop(true);mainframe.getmap().get(userto.getaccount()).setAlwaysOnTop(false);8}9}当关闭窗口的时候再设置回来。

1exit.addMouseListener(newMouseAdapter(){2……………………………………3publicvoidmouseClicked(MouseEvente){4mainframe.getmap().remove(chatuser.getaccount());5chatmainframe.dispose();6}7});还有服务器上保存的用户的ip和port,这里将他们存在一个list中,再用hashMap从账号映射到list。主要利用的特性是,list可以放任何的对象。

1publicstaticHashMap>2ip_save=newHashMap>();在逻辑设计中我们可以看到这个HashMap的运用。

因为动态端口的范围从1024到65535,所以理论上是需要设置端口号为这个范围之间的就行了。这里,服务器使用9090端口。开启serversocket用于接受来自客户端的连接。

1staticintport=9090;2ServerSocketserver=null;3try{4server=newServerSocket(port);5}catch(IOExceptione){6e.printStackTrace();7}客户端的端口限定在10086-11000之间。

之前定义了Sender类作为数据包,在java中可以进行序列化,来让Sender对象序列化之后传入Stream中进行数据传输,查询资料后,发现序列化有一个非常简单的实现,就是将需要序列化的类实现Serializable接口,并且设置好serialVersionUID,一般1L就行。

1publicclassSenderimplementsSerializable{2privatestaticfinallongserialVersionUID=1L;3……………………………………………………4}1publicclassUserimplementsSerializable{2privatestaticfinallongserialVersionUID=1L;3……………………………………………………4}这样在将对象直接传入ObjectOutputStream对象或者从ObjectInputStream中读取对象就会自动将对象序列化成一串字节描述或者将字节描述反序列化成对象。

我们从socket中获取输出输入流,但往往缓冲区不够大,也就是说我们无法向流中写入太大的数据,这样我们需要在外面套一层BufferedStream,人为设定缓冲区的大小。

这里很简单的实现了计时器:

这样我们的ServerSocket一旦Accepted到一个客户端socket,就只要把socket传给ServerTask,并让ServerTask进入多线程中进行执行。

1while(running){2try{3Socketsocket=server.accept();4System.out.println("accepted");5executor.execute(newServerTask(socket));6}catch(IOExceptione){7e.printStackTrace();8}9}1publicclassServerTaskimplementsRunnable{2privateSocketsocket;3privateSendersender;4ObjectInputStreamis;5ObjectOutputStreamos;6publicServerTask(SocketSOCKET){7socket=SOCKET;8}9publicvoidrun(){5.9安全性5.9.1MD5加密现代数据库中存储密码几乎都不再使用明文存储,而是在数据库中保存好加密后的密码,这里我们使用了MD5加密算法,这种算法很难进行反向破解,安全性尚可。

1publicclassEncryption{2publicstaticStringgetMD5(Stringstr)throwsNoSuchAlgorithmException{3//生成一个MD5加密计算摘要4MessageDigestmd=MessageDigest.getInstance("MD5");5//计算md5函数6md.update(str.getBytes());7//digest()最后确定返回md5hash值,返回值为8为字符串。因为md5hash值是16位的hex值,实际上就是8位的字符8//BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值9returnnewBigInteger(1,md.digest()).toString(16);10}11}在注册和修改密码时我们向数据库中保存密码的MD5值。

1publicstaticStringgetUserList(Stringaccount)throwsNoSuchAlgorithmException{2return"List_"+Encryption.getMD5(account);3}1publicstaticStringgetChatList(String[]account)throwsNoSuchAlgorithmException{2Arrays.sort(account);3return"Chat_"+Encryption.getMD5(account[0]+account[1]);4}5.9.2防注入现在SQL注入攻击在网络上甚嚣尘上,怎么样防止这样类似的攻击,查询JDBC的API之后,发现存在这样一种方法可以大幅度降低SQL注入攻击的风险。

1publicclassSQLconnect{2publicConnectionconn=null;3publicPreparedStatementpst=null;4publicSQLconnect(Stringsql){5try{6Class.forName(SQLconfig.name);//指定连接类型7conn=DriverManager.getConnection(SQLconfig.url,SQLconfig.user,SQLconfig.password);//获取连接8pst=conn.prepareStatement(sql);//准备执行语句9}catch(Exceptione){10e.printStackTrace();11}12}13publicvoidclose(){14try{15this.conn.close();16this.pst.close();17}catch(SQLExceptione){18e.printStackTrace();19}20}21}就是prepareStatement(),这个方法能够将SQL语句的参数与SQL语法分开,避免了字符串连接,从而加强了安全性。

1"insertintouser(id,account,password,nickname,autograph,gender,birthday,age,location,school2,company,job,statu,create_time)values(null,,,,,,,,,,,,,)";5.10逻辑设计5.10.1服务器通用任务在ServerTask开始执行时,会首先从socket中获取ObjectInputStream从而从中读出sender。

1publicclassServerTaskimplementsRunnable{2privateSocketsocket;3privateSendersender;4ObjectInputStreamis;5ObjectOutputStreamos;6publicServerTask(SocketSOCKET){7socket=SOCKET;}8publicvoidrun(){9ObjectInputStreamis=null;10ObjectOutputStreamos=null;11try{is=newObjectInputStream(newBufferedInputStream(socket.getInputStream(),256*1024));12sender=(Sender)is.readObject();13System.out.println(sender);14}catch(IOExceptione1){15e1.printStackTrace();16}catch(ClassNotFoundExceptione){17e.printStackTrace();18}19…………………………………………接着就是对sender.SIGINAL的解析分类执行。

JDBC中,SQL语句查询执行之后会返回一个ResultSet,只需要判断ResultSet有没有next就行,true表示有,false表示没有。

1case(2):2Useruser2=sender.getuserfrom();3SQLconnectsqls2=newSQLconnect(SQLconfig.check_exist);//连接数据库,准备好检查的SQL语句4try{5sqls2.pst.setString(1,user2.getaccount());6ResultSetresult=sqls2.pst.executeQuery();7//检查返回结果集中有没有第一个值8if(result.next()){9sender.setsuccess(1);10user2.setnickname(result.getString("nickname"));11}else{12sender.setsuccess(0);13}14sender.setuserfrom(user2);15os=newObjectOutputStream(newBufferedOutputStream(socket.getOutputStream(),256*1024));16os.writeObject(sender);17os.flush();18os.close();19is.close();20socket.close();21}catch(SQLExceptione){22e.printStackTrace();23}catch(IOExceptione){24//TODOAuto-generatedcatchblock25e.printStackTrace();26}finally{27sqls2.close();28}29break;5.10.4服务器注册流程先添加用户,再创建好友列表。

首先获取双方用户数据:

1Useruserfrom=sender.getuserfrom();2Useruserto=sender.getuserto();接着,找到双方用户在数据库中的id号。

1SQLconnectsqls10=newSQLconnect(2SQLconfig.sql_create_chat(newString[]{userfrom.getaccount(),userto.getaccount()}));3sqls10.pst.executeUpdate();4sqls10.pst=sqls10.conn.prepareStatement(SQLconfig.check_exist);5sqls10.pst.setString(1,userfrom.getaccount());6ResultSetresult=sqls10.pst.executeQuery();7intidfrom=0;8if(result.next()){9idfrom=result.getInt("id");10}11sqls10.pst.setString(1,userto.getaccount());12result=sqls10.pst.executeQuery();13intidto=0;14if(result.next()){15idto=result.getInt("id");16}然后,在服务器保存聊天记录,如果失败,则直接返回给客户端。

1sqls10.pst=sqls10.conn.prepareStatement(SQLconfig.saveChat(newString[]{userfrom.getaccount(),userto.getaccount()}));2sqls10.pst.setInt(1,idfrom);3sqls10.pst.setString(2,sender.getchat());4sqls10.pst.setString(3,newString(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate())));5intisok=sqls10.pst.executeUpdate();6if(isok>0){7sender.setsuccess(1);8}else{9sender.setsuccess(0);10}11sender.setuserfrom(null);12sender.setuserto(null);13try{14os=newObjectOutputStream(newBufferedOutputStream(socket.getOutputStream(),256*1024));15os.writeObject(sender);16os.flush();17}catch(IOExceptione1){18//TODOAuto-generatedcatchblock19e1.printStackTrace();20}接着检查用户是否在线,如果在线,则把消息发送给对应的用户。

1if(statuto>0){2try{3Socketsendsocket=newSocket((InetAddress)MainServer.ip_save.get(userto.getaccount()).get(0),(int)MainServer.ip_save.get(userto.getaccount()).get(1));4sender.setuserfrom(userfrom);5sender.setuserto(userto);6os=newObjectOutputStream(newBufferedOutputStream(sendsocket.getOutputStream(),256*1024));7os.writeObject(sender);8os.flush();9}catch(IOExceptione){10sqls10.pst=sqls10.conn.prepareStatement(SQLconfig.change_statu);11sqls10.pst.setInt(1,0);12sqls10.pst.setString(2,userto.getaccount());13sqls10.pst.executeUpdate();14MainServer.ip_save.remove(userto.getaccount());15e.printStackTrace();16}17}5.10.8客户端聊天流程在客户端点击发送后,直接给服务器发送,等待服务器回复成功后,加入聊天记录,重绘聊天窗体。

在另一端,如果收到服务器给他发的消息,则也会加入聊天记录,如果存在窗体,就会刷新窗体,如果不存在,就只会有提示音。

1try{2Socketsocket=server.accept();3ObjectInputStreamis=newObjectInputStream(4newBufferedInputStream(socket.getInputStream(),256*1024));5Sendersender=(Sender)is.readObject();6MainFrame.getmessage(sender);7}catch(IOExceptione){8e.printStackTrace();9}catch(ClassNotFoundExceptione){10//TODOAuto-generatedcatchblock11e.printStackTrace();12}1publicstaticvoidgetmessage(Sendersender){2if(chatframe.get(sender.getuserfrom().getaccount())==null){3Toolkit.getDefaultToolkit().beep();4}else{5Toolkit.getDefaultToolkit().beep();6chatframe.get(sender.getuserfrom().getaccount()).gethistorypanel().addmessage(false,sender.getchat());7}8}

THE END
1.如何查到别人的微信聊天记录澎湃号·政务澎湃新闻《如何查到别人的微信聊天记录?[V 一一AYS744一一?]业务详细咨询》剧情介绍: 一、使用第三方工具同步微信聊天记录 三、向对方索要聊天记录 一、使用第三方工具同步微信聊天记录如何查到别人的微信聊天记录 三、向对方索要聊天记录 如果你想同步别人的微信聊天记录,可以考虑使用一些第三方工具来实现。有一些软件https://www.warmfeet.cn/iwsNS2024121801.shtml
2.大家晒一晒情侣聊天记录呗?认识5年多了 高三处了一年 然后分了 大三下学期又在一起了 以前对我爱答不理惜字如金的时候 这https://www.zhihu.com/question/265706328/answer/3205703637?utm_id=0
3.如何同步接收别人微信聊天记录(了解3个查询方式)详细方法数据分析查询是一种较为高级的方法,通过对客房信息进行数据分析,提取有用的信息。酒店可以根据分析结果调整房价策略、客房布局等,提高经营效益。数据分析需要专业知识和技术支持,成本较高。 如何同步接收别人微信聊天记录 酒店开的房记录查询方法对于酒店管理来说至关重要。通过记录查询方法,酒店可以更好地管理客房信息,提https://www.smhg2008.com/index/index/detail/id/9414.html
4.老婆跟谁一起用什么方法看他的微信聊天内容手机安全记录00:32 怎么知道男朋友跟谁在一起微信聊天聊什么内容-手机安全查询 00:32 怎么在本机查看老婆的手机微信聊天内容-手机安全设置 00:32 在哪可以用手机查看男朋友手机微信聊天记录-手机安全查询 00:32 怎么查看女朋友微信的聊天内容-手机安全查询 00:35 手机上查看女朋友微信上跟谁聊天-手机安全记录 00:35https://www.163.com/v/video/VCC9389GI.html
5.一对一免费私聊软件APP推荐一对一免费私聊软件下载而如今,一对一免费私聊软件成为人们日常沟通不可或缺的工具。无论是与朋友分享喜悦,与家人表达关爱,还是与同事商讨工作,这款软件都能满足你的需求。它提供了安全可靠的私密聊天环境,保护你的个人隐私。同时,它还支持多种多样的聊天功能,如文字、语音、图片和视频等,让你能够更全面地沟通交流。无论你身在何处,只https://www.wandoujia.com/bangdan/555007/
6.章友恋爱指导100个聊天记录实战案例!教你告别单身章友恋爱指导 | 100个聊天记录实战案例!教你告别单身 今天章友恋爱社给大家带来了超级福利 原本价值399元 恋爱指导手册+红娘1V1情感指导! 现9.9元放送! 单身章丘小伙伴们 先到先得哦! 手册中有红娘姐姐们精心准备的 情感手册、恋爱课堂手册、提高成功率的万能话题、见面约会宝典!http://share.dazhangqiu.com/wap/thread/view-thread/tid/3150919
7.证券2024一分钟小能手带你,怎么如何同步查询微信近期聊天由于zheng管、qi业对shui法理jie等原yin,实ji上企ye不一ding足额jiao纳法lv意义shang的税fei。WB23RKKRBDDENDDEHSN juguojiwangqiulianhehuifabude《2021nianquanqiuwangqiubaogao》,2021nianquanqiucanyuwangqiuyundongderenkouyou8718wanren,zhongguoyi1992wanrenchengweiquanqiuwangqiucanyurenshupaimingdierdeguojia,http://www.lieren2000.com/wap/colormethod_view.asp?know/windows/20241213/25102352.shtml
8.一对一私聊构成诽谤罪吗然而,针对特定的聊天记录是否已经对他人造成足够严重的侵害,需要具体分析聊天内容所引发的后果。法律依据https://www.64365.com/ask/34052277.aspx
9.uniapp小程序实现微信在线聊天功能(私聊/群聊)javascript技巧这篇文章主要介绍了uni-app小程序实现微信在线聊天(私聊/群聊),今天记录一下项目核心功能的实现过程。页面UI以及功能逻辑全部来源于微信,即时聊天业务的实现使用socket.io,前端使用uni-app开发,后端服务器基于node实现,数据库选择mongoDB,需要的朋友可以参考下https://www.jb51.net/article/275706.htm
10.手游炫舞私聊清除指南轻松告别聊天记录烦恼在手游炫舞中,私聊能是玩家之间沟通的重要方式。但随着游戏时间的增长,积累的私聊记录可能会让一些玩家感到困扰。本文将为大家详细解答“手游炫舞私聊在哪清除”的问题,帮助大家轻松管理自己的聊天记录。 我们需要了解手游炫舞私聊的基本操作。在游戏中,玩家可以通过点击其他玩家的头像,选择“私聊”选项来进行一对一的https://www.922u.com/pingce/83807.html
11.腾讯会议官方——腾讯会议会开会一、功能介绍 参会者可以在会中发送和接收实时消息。您可选择发送消息给所有参会者,也可以与另一名参会者一对一私聊。主持人可以设置参会者的聊天对象,或禁止参会者在聊天中发送消息。 二、使用条件 1.版本要求 ①3.19及以上版本支持在聊天页面发送表情; https://meeting.tencent.com/support/topic/1592/index.html
12.Java实现基于服务器的多用户聊天室F.清除聊天记录功能按钮:清除聊天记录功能 G.退出聊天室:退出聊天室功能 2.2 私聊界面 A.聊天信息文本域:显示聊天信息以及对方用户名 B.文本输入框:文本信息输入功能 C.发送按钮:文本信息发送功能 界面是使用NetBeans(软件下载可点) 直接新建一个Jframe项目就可以开始制作你自己的界面风格,对小白来说是一款很友好https://blog.csdn.net/c_y_s_/article/details/124514621
13.一对一私聊构成造谣罪吗针对一对一私聊是否构成造谣罪这一问题,明确告诉您,如果所聊内容涉及到造谣,那么无论是公开还是私下https://www.findlaw.cn/wenda/q_45130202.html
14.微信聊天记录导出助手新媒体数据工具一个导出微信聊天记录的小工具。 这个软件有点不那么“黑科技”,因为它需要一页页翻屏幕记录你的聊天内容。 正因如此,它很“安全”,不会泄露你的隐私信息。 软件全新升级,可导出以下三种聊天记录: 1.私聊聊天记录,就是一对一聊天。 2.群聊聊天记录。 3.聊天https://www.xiaokuake.com/p/export3.html
15.社群群规社群思维开发文档没有征得别人的同意,请不要把和他的聊天记录截图发给第三者。同理,未经别人同意,也不要把他的微信号告诉别人。 提建议时,请附上你的解决方案。 有求于人和帮助别人区别在于出发点和是否利他。 社群是由独立的个人组成的团体,早上九点前、晚上九点后,不闯入、不打扰、不请求别人的世界。群聊是建立在你情我愿https://www.wenjiangs.com/doc/pqkvavqcg3
16.分享生产聊天记录的软件零代码企业数字化知识站Zoom的核心功能和优势包括视频会议、群组聊天、私聊、文件共享和记录保存。其视频会议功能支持高清画质和多种互动工具,如屏幕共享、白板和投票。群组聊天功能适合团队在会议中实时交流,私聊功能则适合一对一的沟通。文件共享功能支持各种格式的文件,方便团队分享文档、图片和视频。会议记录功能可以保存聊天记录和视频录制,https://www.jiandaoyun.com/blog/article/366531/
17.企业微信可以拉黑名单吗?设置后怎么解除黑名单?企微实践大家在用企业微信服务客户的时候,是否有遇到过这样的客户:不停的发垃圾消息进行骚扰;在客户群里打广告也不听警告;私自加群好友;踢出群聊后又反复入群遇到这样的客户,我们一定是非常想把他拉黑的。 那么,企业微信有拉黑功能吗? 一、针对一对一私聊的外部联系人 即使客户https://www.qingxun7.com/index.php/content-42
18.微信群发营销软件微信群发营销软件能够通过微信客户标签、地区、姓名、群聊等多个维度的人群进行一对一私聊群发,可设置SOP标准化内容群发,消息会在规定时间节点自动推送给指定人群。并且由于是PC端操作,用户选取更方便,比人工逐个在手机上处理高效更高。(不过需要注意的是,该软件的群发前提是基于企业微信才可以实现) https://www.kuaishang.cn/scrm/18076.html
19.微信一对一发黄色图片会被查嘛,没有被举报,都是互相愿意发的尽管当事人在相互协商之后决定分享私人照片,但是这类照片一旦遭到盗窃、散布或者用作其它非法意图之用时,便有可能构成对他人个人隐私权的亵渎和侵害。接下来华律网小编将为您介绍相关内容。 qq私聊一对一发黄违法吗 不论其情节轻重与否,均将面临不超过十天至十五天的拘留处罚,且可处罚款不超过三千元人民币。若https://mip.66law.cn/question/26446747.aspx
20.永恒之塔中的聊天系统如何操作?3. 公会频道:公会成员之间可以进行私聊、公告等操作,只有加入同一公会的玩家才能看到公会频道中的消息。 4. 私聊频道:玩家可以与特定的玩家进行一对一的聊天,只有被聊天的玩家可以看到私聊消息。 三、发送消息 在聊天界面中,玩家可以使用不同的选项和输入方式来发送消息。 https://www.sousou.com/wd/45240.html
21.微商的新武器:聊天记录大变身Hey亲爱的姐妹们微商的新武器:聊天记录大变身 Hey亲爱的姐妹们!作为一名活跃的微商,是不是总想让你的聊天记录更加生动有趣? 今天,我要给你介绍一款必不可少的神器——微信聊天生成器!这款生成器,不仅能让你自定义头像 - 心灵治愈者于2https://www.douyin.com/note/7364697611955080499
22.酷奥TT下载最新pc版酷奥TT电脑版官方免费下载安装酷奥TT是互联网聊天沟通新时代的产物之一,酷奥TT聊天工具拥有最实用的功能,最简便的操作步骤,让用户朋友在第一时间感受到互联网聊天原来是如此的轻松便捷。 功能介绍 o 私聊 一对一私聊内容绝对加密,让聊天更安全; o 发动态 今天心情怎么样?发条动态告诉大家吧; o 群聊 大家一起聊天,让气氛更加欢乐; o 语音 http://www.onlinedown.net/soft/1197070.htm
23.聊天加密的软件有哪些可以隐私聊天的软件推荐纸飞机中文版app下载,一款十分注重隐私的聊天软件,用户可以快速的添加好友,支持双方在平台上进行一对一的私聊,提供最安全的聊天记录保护。纸飞机中文版加密聊天软件提供最优质的隐私保护,为用户的信息安全提供持续的保障,大家快来下载纸飞机中文版app。 纸飞机中文版 https://www.shubang.net/news/9002.html
24.纸飞机app聊天软件下载,telegeram安卓下载官网3、1纸飞机中文版纸飞机中文版app下载,一款十分注重隐私的聊天软件,用户可以快速的添加好友,支持双方在平台上进行一对一的私聊,提供最安全的聊天记录保护纸飞机中文版加密聊天软件提供最优质的隐私保护,为用户的信息安全提供持续的保障,大家快来下载纸飞机中文版app纸飞机中文版评价立即下载2菠萝。 4、1 纸飞机中文版http://www.ynpykj.com/post/4761.html