收藏 分销(赏)

毕业设计(论文)-基于JAVA的多人聊天室设计.doc

上传人:天**** 文档编号:5176013 上传时间:2024-10-28 格式:DOC 页数:44 大小:588KB
下载 相关 举报
毕业设计(论文)-基于JAVA的多人聊天室设计.doc_第1页
第1页 / 共44页
毕业设计(论文)-基于JAVA的多人聊天室设计.doc_第2页
第2页 / 共44页
毕业设计(论文)-基于JAVA的多人聊天室设计.doc_第3页
第3页 / 共44页
毕业设计(论文)-基于JAVA的多人聊天室设计.doc_第4页
第4页 / 共44页
毕业设计(论文)-基于JAVA的多人聊天室设计.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、摘要随着信息革命的到来,使用网络工具进行交流已经成为我们平常生活里不可或缺也脱离不开的一件事,相比较与使用手机通讯和短信交流,它们过于繁琐和昂贵,而网络通信工具由于使用方便、传递信息的即时性,特别是众多青少年人的追捧和使用。更加关键的是网络工具给我们提供了一个低消费更便于交流沟通的平台,这个网络工具平台拥有广泛性、即时性、便捷性,因而得到了广大公司、事业单位、院校和民众的认可,本论文叙述的是一种基于利用TCP/IP协议的、利用数据流的存储和读取、C/S框架结构模式、多线程、实现设计点对点和点对面通信的一个多人网络连天工具,可以进行私聊、群聊、文件传输等.关键词:Java;聊天室;线程;协议;数

2、据流;C/S结构;AbstractWith the advent of the information revolution, using networking tools to communicate one thing has become indispensable in our daily life are inseparable from the comparison with the use of mobile communications and text messaging communication, they are too cumbersome and costly, a

3、nd online communication tools due to ease of use, instant transfer of information, especially the many young people to the pursuit and use. More critical is networking tools provides us with a low consumption easier communication platform, the network platform has extensive tools, immediacy, conveni

4、ence, and therefore get the majority of companies, institutions, universities and public recognition, this paper describes is based on the use of TCP / IP protocol, the use of storage and reading of data flow, C / S frame mode, multi-threaded, to implement a multiplayer online groaning tool design p

5、oint and point opposite the communications, you can private chat, group chat, file transfer, and so on.Keywords: Java; chat rooms; thread; protocol; data stream; C / S structure;目录第1章 绪论31.1选题背景31.2目的和意义4第2章 系统概况42.1软件系统主要功能42.2软件系统所用技术42.2.1 java多线程技术42.2.2 TCP/IP协议52.2.4 java数据流技术6第3章 关于多人聊天室的分析和设

6、计73.1关于系统分析73.1.1系统可行性分析73.2系统功能分析83.2.1客户端功能实现分析83.2.2 服务器端系统分析93.3系统流程图10第4章 系统实现115.1 客户端界面和功能实现115.1.1 登录和注册界面115.1.2 用户列表界面215.1.3 聊天窗口和文件传输界面265.2 服务器端实现35第5章 结束语41参考文献41第1章 绪论1.1选题背景在信息爆炸的今天信息的沟通和交流已经和我们息息相关。尽管一些通信工具和通信手段,例如手机和电话,可是手机短信和电话通讯相对于网络通信工具日积月累下来花费也是相当不菲;所以一般的通信工具对于长时间的沟通和交流以及大量的信息传

7、输都是相当不便和不划算的。网络通讯工具和软件,同样的由于它的方便快捷和免费性,仅需要之间都有能够连接互联网的Computer或者手机等工具,安装有对应的工具或客户端,这样能够进行大量的信息传输和沟通;网络聊天工具同时方便与我们与不国家、不同地点和多个人进行沟通,交流的过程中还可以传输发送大量的资料,相比较而言更加的方便快捷也没有传统通信工具的局限性,更加节省了过多的通信花费;而且它还具有电话和短信所没有的视频和语音聊天功能,可以使用户得到不同于传统通信手段的优质服务。这也让网络通信工具受到了广大的公司、企业及院校的追捧,大多的企业和院校都有相应的网络通信软件工具或者对应的自己开发的网络通信工具

8、,方便于进行企业和院校日常的信息和事务处理。本论文所叙述的多人聊天是软件是通过了解广泛受到大众喜爱的聊天工具qq的基础上自己模仿制作的一个实现了部分功能作用的网络聊天工具。1.2目的和意义网络聊天工具会帮助事业单位、公司和大众带来便捷的信息事务处理。可以帮助大众解决信息传输和沟通中的数据和信息无法及时接受和传输的问题,它的即时性,广域性和无局限性为企业和大众之间的感情凝聚,与外界的沟通交流也因此变得更加高效和方便,它改变了我们的生活方式。在现实生活中我们有多种手段和亲戚朋友沟通交流和通讯,但要么是实时性不强或则是费用太高、功能单一无法做到网络聊天工具的多样性功能,能够同时与多个好友进行通讯,这

9、无疑填补了我们生活方式的空白,而网络聊天软件的使用方便快捷、系统占用消耗资源少等诸多优点,都让他快速成为了企业事业单位和个人广泛应用的软件之一。第2章 系统概况2.1软件系统主要功能1.用户注册:用户需要输入昵称和密码,并且昵称是没有被占用且合法的,而密码和输入的重复密码也是一致的,才会提示注册成功;2.用户登录:用户需要输入相应的用户昵称和用户密码,这样用户才能登陆通过,然后转到用户列表信息界面,如若用户昵称和用户密码都输入错误,那么我们会弹出一个信息提示框,提示用户信息输入错误和登陆失败。3.用户聊天:用户聊天分为私聊和群聊,群聊不指定任何用户,即所有用户都可以接受信息和回复信息,私聊即指

10、定用户接受信息,具有隐秘性;4.文件传输:用户之间可以共享发送文件和资料,在聊天界面点击发送文件按钮,然后选择文件发送即可;2.2软件系统所用技术2.2.1 java多线程技术什么是进程,进程process是一个占有资源和需要消耗资源的内存区域,我们根据他的功能单元会对他在操作系统进行区分,进程中所包含的一个或多个执行单元称为线 程(thread)。一个操作系统做可以同时运行多个程序(任务),每个被运行的程序(任务)都可以被称为一个进程。一个程序同时运行多个任务,那么每个任务就称作为一个线程。线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个

11、名为主线程或首要线程的线程。通常,操作系统上运行的每一个应用程 序都运行在一个进程中,例如:QQ,IE等等。线程是并发运行的,操作系统将运行时间分为若干个时间片段,尽可能均匀的分配给每一个任务,被分配时间片段之后,任务就有可能CPU所执行,从微观上来讲,每个任务都是走走停停,但是随着任务的执行宏观上来看就是所有任务都在执行,这种都运行的现象就称之为并发,但绝对不是真正意义上的“同时发生”。在多人聊天室中我们把这个技术运用到用户聊天这个功能当中,实现用户的群聊和私聊。2.2.2 TCP/IP协议 TCP/IP(Transmission Control Protocol/Internet Prot

12、ocol)的简写,包含了一系列构成互联网基础的网络协议。这些协议最早发源于美国国防部的DARPA互联网项目。TCP/IP字面上代表了两个协议:TCP传输控制协议和IP互联网协议。TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层、传输层、互连网络层、网络接口层。在多人聊天

13、室中则是在这种协议基础上实现的彼此之间的信息交流。2.2.3 java Soket技术Socket“套接字”,它在.Socket包下。网络通信模型:C/S:client/server,客户端/服务器端,B/S:browser/server,浏览器端和服务端。C/S结构的优点,应用性强,画面比较多样和绚丽。用用功能复杂。缺点:不易维护,B/S结构的优点:易于维护,缺点:效果差,交互性不强。Socket封装这本地的地址,服务端口等信息,ServerSocket:服务端套接字。永远都是socket主动去连接ServerSocket,一个ServerSocket可以连接若干个Socket。网络通信的前

14、提,一定要捕获异常,然后进行对异常处理。在多人聊天室中我们使用Soket套接字发送或则应答网络请求,同时绑定和监听7788网络端口。亦通过Soket获取网络输出流和网络输入流,在创建了Client和Servlet的连接后即可通过输出和输入流实现网络通讯。 2.2.4 java数据流技术Java提供了一个可以对文件随机访问的操作,访问包括读和写操作。该类名为RandomAccessFile。该类的读写是基于指针的操作。RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写)。流根据方向分为输入和输出流,方向的定位是根

15、据我们的程序的,流向我们程序的称为输入流,从程序往外流的我们称为输出流。输入流是用于获取数据的,输出流是用于往外输出数据的。FileInputStream:通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过系统中的File对象指定,即向文件中输入数据。FileOutputStream,创建一个向指定文件对象中写入数据的文件输出流,会重写以前的内容,向File文件中输入内容时,若该文件不存在,将会自动创建该文件。在多人聊天室软件中,我们主要是将文件输出和文件输入流运用到登录和注册、注册检验和登录检验,以及信息的发送和接受中。2.2.5 java图形界面编程技术图形界

16、面编程技术它所使用的包是放在java.awt包下面的AWT(AbstractWindowToolkit),即为抽象窗口工具包,是由sun公司提供使用的用于图像界面编程(gui)的一个包。基础的使用就是创建一个label对象,然后调用它的方法,使用工具包来创建对象,易啊不能来说,我们所开发的界面是可以在所有的操作系统上所使用的,这可以节省我们很多的麻烦。在多人聊天室系统中,我们在设计聊天室的登录、注册和聊天窗口中我们都运用到了java图形界面编程技术。2.3 软件系统工作原理Java多人聊天室是基于TCP/IP协议的基础上设计的一种采用C/S模式的可实现多人聊天和传输文件的软件,在这个软件中我们

17、采用了图形界面编程技术设计实现了软件的登录和注册、聊天窗口,达到了软件的美化效果。用户的注册和登录检验以及信息的发送和接受我们是运用到了java的数据流技术,通过java文件输出和输入流获取指定文件中用户的信息从而检验用户名和密码是否正确,以及通过Soket运用字符流的输入和输出接受和发送用户的信息,从而达到用户之间的通讯和交流。通过java的多线程技术我们实现了用户的群聊和私聊功能,从而满足了用户的两种不同需求。在Servlet方面,我们首先通过Socket建立服务器和客户端之间的连接,创建Soket实例,使用ServletSoket监听端口,获取用户状态以及用户的网络发送请求和应答请求,在

18、本文并没有过多实现服务器端的功能,所以服务器端只是一个文件和数据的中转站和传输站。第3章 关于多人聊天室的分析和设计3.1关于系统分析3.1.1系统可行性分析Java语言,它是一种方便我们去理解也方便我们去设计和开发的编程语言,它相较于其他的编程语言,有许多别的不具有的优势,这种编程语言是比较简单的,它不受限与操作系统平台,然后它是在C+的基础上进化过来的,所以它的身上还有很多C语言的痕迹,java语言相对于别的编程语言它是出现的比较晚的,这也决定了他的先进性。这也就体现了java语言的通用性和便捷性,使我们不需要为了在不同的平台运行而去修改程序烦恼,这大大提高了我们程序和代码的重用性,也同时

19、提高了我们编程的效率,不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,java编程语言它到现在为止是比较完善的、先进的、便于掌握的、便于开发的,这也就是java语言风靡全球的原因所在,所以这个多人聊天室软件就是采用的java语言而实现开发设计的,在通过myeclipse我的设计过程中大大提高了我的工作效率,也同时帮我解决了一些API不熟练的问题,作为一款辅助编程工具,myeclipse在java开发这个行业类普及率是非常高的,而Soket是进行网络通信编程的一种强大的API,也是诸多操作系统的网络通用标准。本系统

20、主要分为两大部分:TCP/IP Server和客户端client以下就是客户端Client和Server服务器端的程序运行模块图:3.2系统功能分析3.2.1客户端功能实现分析客户端的主要功能还是提供用户之间的聊天服务和文件传输服务,但是我们会通过注册页面和登录页面先进行用户验证,然后在用户列表界面我们找到好友进行通讯,我们可以选择私聊和群聊,也可以向另一个用户传输文件和资料,下面进行详细分析。1.登录界面登录界面上,将会显示两个用户输入框,一个是用户输入框和用户密码输入框。在用户输入完用户信息之后,双击登陆按钮,客户端Client将会开始和Server服务器进行连接,在Server和Clie

21、nt链接过程中,首先会检查Server服务器是否启动,亦或者是服务器网络是否畅通,客户端Client和Server服务器端连接是否成功,如果客户端Client和Server没有连接成功,登录界面会给出一个友好的提示框,提示用户服务器没有启动或者服务器Server连接错误。其次在客户端会通过图形界面编程的API获取用户在登陆界面输入的用户名和用户密码,通过数据流传输到服务器,将Client传送过来的用户帐号和用户密码和Server端的文件所存储的用户名和密码相对照,如果用户昵称和用户密码都输入正确,提示登陆成功,将用户转到聊天窗口界面。反之则会弹出提示用户昵称或者用户密码输入错误,提示用户重新输

22、入用户信息。2.用户列表界面用户列表信息界面是要在成功登录后,弹出的一个展示用户的好友信息的一个列表,在上面有一个群聊按钮,点击群聊按钮将会弹出群聊窗口进行多人聊天,也可以双击好友昵称进行私聊,这个功能是通过界面的点击事件,然后传递信息的,触发事件之后通过数据流和节点处理进行分析和处理,从而判断用户是否要使用私聊或者使用群聊。3.聊天窗口 聊天窗口也是作为这个多人聊天室软件的主界面,在这个,用户可以进行多人聊天和私聊。也可以向另一个用户发送文件和资料,在聊天窗口界面上有一个传输文件按钮,点击即可从电脑上选择文件传输给另一个用户,在这里我们首先是采用socket建立Client和Server的信

23、息连接,这样多个客户端之间才能通过Server传递消息,其中客户端和服务端的发送和接受信息都是要通过I/O流进行解析和传递复制信息的,每个客户端对应一个线程进行处理这个客户端的所有事务,客户端对应线程会处理服务器端传输过来的信息然后传递给用户显示在用户聊天界面,所以采用了多线程技术,客户端不仅要接受服务端传输过来的信息,也要对服务器进行信息反馈,所以要有一个专门的线程给服务端服务。传输文件的话我们主要是运用到I/O流这个技术的,通过字符流和字符缓冲流我们将文件逐行读取解析复制,然后通过字节流和字节输出流将所读取到的字符解析成字节,输入到同一名称的文件中给用户。3.2.2 服务器端系统分析服务器

24、端的的主要作用通过ServerSocket在服务器上建立一个服务器端口号,通过Socket使用这个Socket端口号将客户端与服务器端相连接。从而通过socket获取从客户端读取的数据进行分析处理,最后将处理解析结果反馈给客户端,比如,用户登录时,通过soket将用户名和用户密码传递给服务器端,服务器端再将客户端传递过来的数据和存储在文件中的数据进行对比,如果数据相符合则服务器返回结果,从而跳转到用户信息列表界面,如果验证失败,则弹出相应提示,重新登陆。用户之间的信息传输也是通过服务器端的中转处理,然后通过线程和I/O流传输给另一个用户,服务器端还有一个作用就是存储和中转用户的信息和资料,通过

25、线程获取客户端信息,然后从Soket那里得到用户要传递和存储的信息,使用I/O流进行处理分析,最后存储到文件中或传递给用户。3.3系统流程图为了让我们更好的了解和设计多人聊天室这个软件,也更好的开发和维护这个软件,我们根据客户端和服务器端的功能模块之间的逻辑关系给出了一个流程图,这个流程图主要是分为服务器端和客户端两个部分,服务器端我们从建立ServerSoket端口号开始进行解析,到线程死亡结束,客户端我们从登陆界面开始到用户关闭聊天窗口结束。 根据流程图我们可以得出用户首先要通过登录界面成功通过用户名和用户密码的验证,就可以成功进入聊天室进行多人聊天和用户私聊,如果没有帐号,则需要通过注册

26、将用户信息存储到服务器端,然后登录。出现几个客户端时,服务端就会才用多线程技术,这样客户端与客户端的信息才不会出现混淆,而服务器端也有一个线程进行专门管理客户端反馈过来的信息,进而提高服务器的处理效率。第4章 系统实现5.1 客户端界面和功能实现5.1.1 登录和注册界面登录界面登陆界面关键代码public class Login private JFrame jFrame = null; private JPanel jContentPane = null;private JLabel jLabelLoginUserName = null;private JLabel jLabelLogin

27、Password = null;private JTextField jTextFieldLoginUserName = null;private JPasswordField jTextFieldLoginPassword = null;public JButton jButtonLogin = null;public JButton jButtonReg = null;private LinkInfo linkInfo;private InputStream in; private OutputStream out; private GetServerInfo gif;public Log

28、in(LinkInfo linkInfo)this.linkInfo = linkInfo;this.getJFrame().setVisible(true);/* * This method initializes jFrame * * return javax.swing.JFrame */public void closeFrame()this.jFrame.dispose();this.linkInfo.setLogin(null);private JFrame getJFrame() if (jFrame = null) jFrame = new JFrame();jFrame.se

29、tSize(new Dimension(389, 274);jFrame.setTitle(登陆);jFrame.setResizable(false);jFrame.setContentPane(getJContentPane();jFrame.addWindowListener(new java.awt.event.WindowAdapter() public void windowClosing(java.awt.event.WindowEvent e) System.exit(0););return jFrame;/* * This method initializes jConten

30、tPane * * return javax.swing.JPanel */private JPanel getJContentPane() if (jContentPane = null) jLabelLoginPassword = new JLabel();jLabelLoginPassword.setBounds(new Rectangle(18, 107, 335, 38);jLabelLoginPassword.setFont(new Font(Dialog, Font.BOLD, 14);jLabelLoginPassword.setText( 密 码:);jLabelLoginU

31、serName = new JLabel();jLabelLoginUserName.setBounds(new Rectangle(18, 53, 335, 38);jLabelLoginUserName.setFont(new Font(Dialog, Font.BOLD, 14);jLabelLoginUserName.setText( Talk号:);jContentPane = new JPanel();jContentPane.setLayout(null);jContentPane.add(jLabelLoginUserName, null);jContentPane.add(j

32、LabelLoginPassword, null);jContentPane.add(getJTextFieldLoginUserName(), null);jContentPane.add(getJTextFieldLoginPassword(), null);jContentPane.add(getJButtonLogin(), null);jContentPane.add(getJButtonReg(), null);return jContentPane;/* * This method initializes jTextFieldLoginUserName * * return ja

33、vax.swing.JTextField */private JTextField getJTextFieldLoginUserName() if (jTextFieldLoginUserName = null) jTextFieldLoginUserName = new JTextField();jTextFieldLoginUserName.setBounds(new Rectangle(84, 56, 266, 33);jTextFieldLoginUserName.addKeyListener(new java.awt.event.KeyAdapter() public void ke

34、yPressed(java.awt.event.KeyEvent e) if(e.getKeyCode()=java.awt.event.KeyEvent.VK_ENTER)/当在用户名框中按回车时,调用登陆方法doLogin(););return jTextFieldLoginUserName;/* * This method initializes jTextFieldLoginPassword * * return javax.swing.JTextField */private JTextField getJTextFieldLoginPassword() if (jTextField

35、LoginPassword = null) jTextFieldLoginPassword = new JPasswordField();jTextFieldLoginPassword.setBounds(new Rectangle(84, 111, 266, 33);jTextFieldLoginPassword.addKeyListener(new java.awt.event.KeyAdapter() public void keyPressed(java.awt.event.KeyEvent e) if(e.getKeyCode()=java.awt.event.KeyEvent.VK

36、_ENTER)/当在密码框中按回车时,调用登陆方法doLogin(););return jTextFieldLoginPassword;/* * This method initializes jButtonLogin * * return javax.swing.JButton */private JButton getJButtonLogin() if (jButtonLogin = null) jButtonLogin = new JButton();jButtonLogin.setBounds(new Rectangle(143, 162, 120, 41);jButtonLogin.

37、setText(登陆);jButtonLogin.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) /当点击了登陆按钮时,调用登陆方法doLogin(); );return jButtonLogin;/登陆方法private void doLogin()try/连接服务器端this.linkInfo.initSocket();if(this.linkInfo.getSocket()!=null)/做一些简单的验证,实际上这

38、里应该有比较复杂的验证,比如敏感字符if(jTextFieldLoginUserName.getText()!=null&!jTextFieldLoginUserName.getText().equals()&jTextFieldLoginPassword.getText()!=null&!jTextFieldLoginPassword.getText().equals()if(in=null)in = this.linkInfo.getSocket().getInputStream();if(out=null)out = this.linkInfo.getSocket().getOutput

39、Stream();/如果获取来自服务器端信息的线程没有启动,则启动该线程if(gif=null)gif = new GetServerInfo(this.linkInfo);new Thread(gif).start();/登陆过程中,使登陆界面上的登陆按钮不可用jButtonLogin.setEnabled(false);/设置LinkInfo中自己的信息this.linkInfo.setMe(jTextFieldLoginUserName.getText();/发送登陆请求IOUtil.writeShort(Request_Command.LOGIN, out);IOUtil.writeS

40、tring(jTextFieldLoginUserName.getText(), out);IOUtil.writeString(jTextFieldLoginPassword.getText(), out);elsethis.linkInfo.getAlert().showAlert(用户名或密码为空);catch(Exception e)e.printStackTrace();注册界面关键代码/* * This method initializes jButtonReg * * return javax.swing.JButton */private JButton getJButtonR

41、eg() if (jButtonReg = null) jButtonReg = new JButton();jButtonReg.setBounds(new Rectangle(295, 214, 82, 28);jButtonReg.setText(去注册);jButtonReg.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) /如果点击了去注册按钮/关闭登陆框closeFrame();/显示注册框linkInfo.

42、setReg(new Reg(linkInfo););return jButtonReg;public class Reg private JFrame jFrame = null; / jve:decl-index=0:visual-constraint=241,22private JPanel jContentPane = null;private JLabel jLabelRegUserName = null;private JLabel jLabelRegPassword = null;private JLabel jLabelRegRepassword = null;private

43、JTextField jTextFieldRegUserName = null;private JPasswordField jTextFieldRegPassword = null;private JPasswordField jTextFieldRegRepassword = null;public JButton jButtonReg = null;public JButton jButtonLogin = null;private InputStream in; private OutputStream out; / jve:decl-index=0:private GetServer

44、Info gif;private LinkInfo linkInfo;public Reg(LinkInfo linkInfo)this.linkInfo = linkInfo;this.linkInfo.setReg(this);this.getJFrame().setVisible(true);public void closeFrame()this.jFrame.dispose();this.linkInfo.setReg(null);/* * This method initializes jFrame * * return javax.swing.JFrame */private JFrame getJFrame() if (jFrame = null) jFrame = new JFrame();jFrame.setSize(new Dimension(398, 337);jFrame.setTitle(注册);jFrame.setResizable(false);jFrame.setContentPane(getJContentPane(

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服