(精选)基于TcpIP协议的网络通讯设计(服务器)_第1页
(精选)基于TcpIP协议的网络通讯设计(服务器)_第2页
(精选)基于TcpIP协议的网络通讯设计(服务器)_第3页
(精选)基于TcpIP协议的网络通讯设计(服务器)_第4页
(精选)基于TcpIP协议的网络通讯设计(服务器)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 JISHOUUNIVERSITY专业课课程论文题 目:基于 TCP/IP协议的网络通讯设计作 者:学 号:所属学院:信息科学与工程学院专业年级:总 评 分:完成时间:吉首大学信息科学与工程学院基于Tcp/IP协议的网络通讯设计(吉首大学信息科学与工程学院,湖南 吉首 41600)摘要本论文设计的目的是基于TCP/IP点对点通讯技术,以VB为平台设计并实现了一个基于C/S(客户端/服务器)模式的五子棋网络游戏的总体设计方法。本设计主要是建构服务器端,采用TCP/IP网络协议,使用VB提供的Winsock控件来实现与客户端的网络通信功能。主要功能是使客户端能连接到服务器端,双方可以通过网络对战,

2、并且能够自动判断胜负。特点是支持双方网上聊天功能,还增添了悔棋、复盘、保存棋局/聊天记录等功能。关键词:Winsock;VB;C/S工作模式;五子棋;TCP/IPRealization of network communication design based on Tcp/IP protocol (Server)AbstractThe thesis is aimed to achieve a C/S (Client/Server) mode backgammon online game based on the point to point communication technology

3、by TCP/IP, with the Microsoft Visual Basic software platform. This design main to build a server-side that applied the TCP/IP protocol as the network protocol and used the tool of Visual Basic, Winsock, to realize the network communication. The functions of the design contain Client and Server side

4、can be connected to each other and plays the backgammon games online, then it can auto judge the victory or defeat. The designs feature is to support chats online, undo, and replay, save games and chat records.Keywords: Winsock; Microsoft Visual Basic; Client/Server mode; backgammon game; TCP/IP目录第一

5、章绪论11.1 五子棋的简介1第二章 开发工具的选择22.1 开发背景与现状2第三章 网络通讯的基本原理33.1 Tcp/IP 体系结构33.1.1 Tcp/IP简介33.1.2 Tcp/IP特点33.1.3 Tcp/IP协议的应用43.2 Winsock533需求分析与总体设计73.3.1 需求分析 五子棋功能需求 五子棋的规则73.3.2 总体分析734 五子棋游戏设计93.4.1 设计原理93.4.2通讯流程93.4.3 算法描述 棋盘绘制算法 判断输赢算法 下棋决策算法 聊天记录管理

6、算法 下棋记录管理算法18第四章 软件测试204.1 登陆界面设计204.2 下棋界面设计21第五章 软件测试225.1 问题的发现225.2 问题的解决22第六章 总结与体会236.1 总结236.2 体会23参考文献25第一章绪论1.1 五子棋的简介众所周知,五子棋是我国古代的、传统的黑白棋种之一,大约在南北朝时期随围棋一起先后传入朝鲜、日本等地。五子棋国际上正式称“连珠”,五子棋简单易学而又富有趣味,为大众喜爱。然而,五子棋又包含深奥的哲理和技巧,尤其是随着国际职业连珠运动的发展和竞赛规则的逐步完善,技法和战术有了很大发展,因此已不再是简单的游戏。五子棋与围棋棋子相似,

7、围棋像军团作战,博大精深;五子棋则短兵相接,凶险复杂。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为广大人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。第二章 开发工具的选择2.1 开发背景与现状在很早以前五子棋软件就已经被开发出来了,当时的五子棋软件仅提供了“人机模式”与“双人模式”。“人机模式”是指,人与计算机进行对弈,计算机按照事先编写

8、好的算法程序来进行下棋;“双人模式”是指,两个人通过交替使用同一台计算机来进行下棋。无论是选择哪一种模式,所有的操作都必须在同一台计算机上来往完成,棋局无法在异地计算机之间来进行,故而也叫单机版五子棋软件。随着计算机网络的迅猛发展,异地计算机之间的通信变得十分便捷。这也为异地间的用户通过网络来进行下棋提供了可能。网络五子棋软件利用TCP/IP协议,在异地的玩家之间建立起TCP连接,并用它来交换棋局的各种数据信息。所以,网络五子棋软件在下棋以前必须要对相关的网络参数进行设置,才能实现玩家双方的成功连接。连接成功后,玩家双方轮流下棋,并将每一步下棋的信息通过网络传送给对方,使得双方棋盘上的棋子保持

9、一致,并且提供了“互动聊天”“悔棋”、“复盘”和“保存棋局”等功能。第三章 网络通讯的基本原理 3.1 Tcp/IP 体系结构3.1.1 Tcp/IP简介TCP/IP 作为 Internet的核心协议,通过近二十多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP 协议集确立了 Internet 的技术基础。TCP/IP 协议主要作用于 OSI 网络参考模型中的网络层(第3层)、传输层(第4层)和应用层(第7层)。数据链路层(第2层)的功能主要应用于其它协议如以太网(Ethernet)、ATM、帧中继(Frame Relay),以及多数供应商特定协议等

10、。TCP/IP 充分支持所有通用第2层协议。TCP/IP 组中的应用程序通常直接运行于传输层协议 TCP 或 UDP 上面,并不需要表示层(第6层)和会话层(第5层)的支持。3.1.2 Tcp/IP特点TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中设计。因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内设计,后者为核外设计。用户服务要通过核外的应用程序才能设计,所以要使用套接字(socket)来设计。TCP/IP协议并不完全符合OSI的七层参考模

11、型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 图 3-1-2 TCP/IP参考模型应用层:在TCP/IP模型的最上层是应用层(Application Layer),它包含所有的高层的协议。高层协议有:虚拟终端协议TELNET、文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和

12、HTTP协议等等。传输层:传输层位于互联网层的上一层,传输层的协议只存在于主机之中,它的功能是提供主机之间进程与进程的有效数据传输。传输层使用端口号向应用层中不同进程提供与该端口号相应的服务。在传输层中有TCP协议(Transmission Control Protocol)即传输控制协议,和UDP协议(User Datagram Protocol)即用户数据报协议。互连网络层:它是整个体系结构的关键部分。它的功能是负责路由选择合适的通信节点,使数据分组能从源主机发往目的主机。这些分组到达目的主机的顺序和发送的顺序可能不同,因此如果需要按顺序发送和接收时,高层必须对分组进行排序。网络接口层(主

13、机-网络层):接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。TCP协议是建立在IP协议之上的面向连接的端到端的通信协议。由于IP协议是无连接的不可靠的协议,IP协议不可能提供任何可靠性保证机制,所以,TCP协议的可靠性完全由自身实现。TCP协议采取了确认、超时重发、流量控制等各种保证可靠性的技术和措施。TCP和IP两种协议结合在一起,实现了传输数据的可靠方法。它的安全和可靠性比UDP要高出很多。由于网络五子棋对实时性要求较高,综合考虑的结果,本软件应使用TCP/I

14、P协议。3.1.3 Tcp/IP协议的应用TCP(Transfer Control Protocol)允许你创建并维护一个与远程计算机的连接,使用该连接,两台计算机之间就可以交换数据了。如果你在创建一个客户应用程序,你必须知道服务器计算机的名字T注:建议用IP地址或IP地址(RemoteHost属性),以及要监听的端口号(RemotePort属性),然后调用Connect方法。如果你在创建一个服务器应用程序,设置要监听的端口号(LocalPort属性),调用Listen方法。当客户建立连接请求时,产生ConnectionRequest事件。要完成该连接,在ConnectionRequest事件

15、中调用Accept方法。一旦建立了连接,两台计算机之间就可以发送和接受数据了。要发送数据,调用SendData方法。当接受数据时,产生DataArrival事件。在DataArrival事件中调用GetData方法来检取数据。3.2 Winsock1.TCP协议:TCP(Transfer Control Protocol)是传输控制协议的简称,是基于连接的协议,在数据传输之前必须先建立连接。通过TCP协议建立的是客户/服务器通信方式。 2.UDP协议: UDP(User Data Protocol)是用户数据文报协议的简称,两台计算机之间的传输类似于传递邮件;两者之间没有明确的连接,可作为服务

16、器,也可作为客户机。 使用UDP协议建立对等通信和通过TCP建立客户/服务器通信的方法略有不同,它不需要建立客户和服务器,而是建立对等通信。 3. Winsock属性: LocalPort:返回或者设置所用到的本端口;如果指定的是端口 0,就使用一个随机端口。 Protocol:返回或设置Winsock所用的协议是TCP或UDP。 State:返回控件的状态,用枚举类型来表示。 常数值描述SckClosed0缺省值,关闭SckOpen1打开SckListening2侦听SckConnectionPending3连接挂起SckResolvingHos4识别主机SckHostResolved5已识

17、别主机SckConnecting6正在连接SckConnected7已连接SckClosing8同级人员正在关闭连接SckError9错误表1 Winsock控件的State属性及其描述4. Winsock方法: Listen:用于服务器程序,等待客户访问。 Connect:用于向远程主机发出连接请求 Accept:用于接受一个连接请求 Senddata: 此方法用于发送数据 Getdata: 用来取得接收到的数据 格式:Winsock对象.getdata 变量 ,数据类型 ,最大长度 Close: 关闭当前连接 格式:Winsock对象.close 5.事件: DataArrival:新数据

18、到达时出现;获取一个 GetData 调用中的全部数据。 ConnectionRequest:当远程计算机请求连接时接受连接请求。 SendComplete :在完成一个发送操作时出现 。 SendProgress :在发送数据期间出现 。 Close :当远程计算机关闭连接时出现。33需求分析与总体设计3.3.1 需求分析软件的需求分析是软件生存期中重要的一步,也是决定性的一步。只有通过需求分析才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。在此阶段,了解用户要求本软件必须满足的所有功能和限制,以及用户对软件功能和性能的要求,弄清用户想要软件“做什么”,准

19、确地表达用户的要求。 五子棋功能需求能通过网络进行下棋符合五子棋的基本规则提供 “复盘”、“悔棋”等功能提供玩家之间的聊天功能有背景音乐提供保存聊天记录和下棋记录的功能 五子棋的规则规则没有依照国际的规定,所以在19x19的棋盘上,只要任一方先连成五颗就获胜。当主机的人为先手,下黑子。3.3.2 总体分析在需求分析结束后,已经弄清楚了软件的各种需求,较好地解决了用户要软件“做什么”的问题,接下来就将着手实现软件的需求,即要着手解决“怎么做”的问题。在这个阶段着重实现需求的程序模块设计问题,并将需求转化为软件的系统结构,进行模块的划分,确定每个模块的功能、接口及模块之

20、间的调用关系。根据需求分析制订出整个软件的系统结构图,如图2.2所示:图2-234 五子棋游戏设计3.4.1 设计原理使用VB提供的Winsock控件来实现网络通信,采用的网络协议是Tcp/IP协议,包括服务器端和客户端,游戏双方一方先运行服务器端,另一方运行客户端,连接到服务器端,双方通过网络对战,能够自动判断胜负,还支持双方聊天的功能。该游戏的界面能显示目前的对弈状态,同时能显示对弈双方之间的聊天信息。通过它建立起服务器与客户端之间的连接,服务器端负责接受客户端的连接和处理客户端的数据,客户端负责连接到服务器并处理游戏时的交互。流程图如下:图通讯流程1.服务器端程序实现过程

21、:(1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。 (2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。 (3)客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数requestID。 (4)服务器程序用Accept方法接受客户机程序的requestID请求。这样,服务器程序就可以用SendData方法发送数据了。Accept方法必须用上一步得到的requestID作为其参数。 (5)当服务器程序接收到数据时,产生DataArrival事件,参数B

22、ytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。 (6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。 2.客户端程序的实现过程是: (1) 客户程序设置Remotehost属性,以便指定运行服务器程序的主机 名,该字符串可在“控制面板|网络|标识|计算机名”中查到。 (2) 设置RemotePort属性,以便指定服务器程序的侦听端口。 (3)使用Connect方法,向服务器提出连接请求。 (4)服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。 (5)当客户机程序接收到数据时,产生

23、DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。 (6)如果接受到Close事件,则用Close方法关闭连接。3.下图为TCP协议通信流程3.4.3 算法描述 棋盘绘制算法绘制一个19x19的棋盘Public Sub growQp() Picture1.Cls Picture1.Left = 0 Picture1.Top = 0 Picture1.Width = 10000 Picture1.Height = 10000 Picture1.Refresh x = 200 y = 200 While x 92

24、00 x = x + 500 Picture1.Line (x, 200)-(x, 9700) Wend While y 9200 y = y + 500 Picture1.Line (200, y)-(9700, y) Wend Picture1.Line (100, 100)-(100, 9800) Picture1.Line (100, 100)-(9800, 100) Picture1.Line (100, 9800)-(9800, 9800) Picture1.Line (9800, 100)-(9800, 9800) Picture1.Line (200, 200)-(9700,

25、200) Picture1.Line (200, 200)-(200, 9700) Picture1.Line (9700, 200)-(9700, 9700) Picture1.Line (200, 9700)-(9700, 9700) blackwin = False whitewin = FalseEnd Sub 判断输赢算法Private Sub judblack() 判断黑是否获胜 Dim i As Single Dim j As Single For i = 0 To 19 For j = 0 To 19 If table(i, j) * table(i, j + 1

26、) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 1 Then MsgBox black win.: blackwin = True ElseIf table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 1 Then MsgBox black win.: blackwin = True ElseIf table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) *

27、table(i + 3, j + 3) * table(i + 4, j + 4) = 1 Then MsgBox black win.: blackwin = True ElseIf table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 1 Then MsgBox black win.: blackwin = True End If Next j Next iEnd SubPrivate Sub judwhite() 判断白是否获胜 Dim i

28、 As Single Dim j As Single For i = 0 To 19 For j = 0 To 19 If table(i, j) * table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 32 Then MsgBox white win.: whitewin = True ElseIf table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 32 Then MsgBox w

29、hite win.: whitewin = True ElseIf table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i + 4, j + 4) = 32 Then MsgBox white win.: whitewin = True ElseIf table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 32 Then MsgB

30、ox white win.: whitewin = True End If Next j Next iEnd Sub 下棋决策算法Private Sub picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 人走 Dim a As Single Dim b As Single If sckServer.State = 0 Then MsgBox 尚未连接,不能下棋! ElseIf blackturn = False Then If (x - 200) Mod 500 25

31、0 Then a = x + 500 - (x - 200) Mod 500 End If If (y - 200) Mod 500 250 Then b = y + 500 - (y - 200) Mod 500 End If i = (a - 200) / 500 j = (b - 200) / 500 上面是鼠标在棋盘所点的具体位置转换成坐标位置 If (table(i, j) = 0) Then sendstr = growQdata(i, j, vbWhite) sckServer.SendData sendstr blackturn = True huiqi.Enabled = T

32、rue intstep = intstep + 1 intx(intstep) = i inty(intstep) = j color = color + 1 intcolor(color) = W Qcolor = vbWhite Call drawQz(i, j, Qcolor) table(i, j) = 2 judwhite If whitewin Then intanswer = MsgBox(继续下一盘吗?, vbYesNo) If intanswer = vbYes Then blackturn = True restart growQp Else MsgBox 如需保存棋局,请

33、单击(保存)按钮 End If End If Else MsgBox 此处已经有棋子,请下别处! End IfEnd IfEnd IfEnd Sub 聊天记录管理算法 If Dir(c:Serverdatachats服务次数记录.txt) 服务次数记录.txt Then Open App.Path & & datachats & 服务次数记录 & .txt For Output As #2 Print #2, 0 Print #2, Date Close #2 For n = 0 To 2 FileName = App.Path & & datachats( & n & ) &

34、Date & 服务聊天记录 & .txt Open FileName For Output As #1 Close #1 Next nElse Open App.Path & & datachats & 服务次数记录 & .txt For Input As #3 jlcount = Line Input #3, jlcount Line Input #3, d Close #3 r = CInt(jlcount) If r = 1 Then a = Date If Trim(d) a Then r = r + 1 Open App.Path & & datachats & 服务次数记录 & .

35、txt For Output As #4 Print #4, r Print #4, Date Close #4 fn = Dir(c:Serverdatachats( & r & ) & *.txt) oldname = c:Serverdatachats & fn newname = c:Serverdatachats( & r & ) & Date & 服务聊天记录 & .txt Name oldname As newname FileName = App.Path & & datachats( & r & ) & Date & 服务聊天记录 & .txt Open FileName F

36、or Output As #1 Print #1, Close #1 Else fn = Dir(c:Serverdatachats( & r & ) & *.txt) oldname = c:Serverdatachats & fn newname = c:Serverdatachats( & r & ) & Trim(d) & 服务聊天记录 & .txt Name oldname As newname FileName = App.Path & & datachats( & r & ) & Trim(d) & 服务聊天记录 & .txt Open FileName For Append A

37、s #1 Close #1 End If ElseIf r = 2 Then r = r + 1 Open App.Path & & datachats & 服务次数记录 & .txt For Output As #4 Print #4, r Print #4, Date Close #4 Else r = 0 Open App.Path & & datachats & 服务次数记录 & .txt For Output As #4 Print #4, r Print #4, Date Close #4 fn = Dir(c:Serverdatachats( & r & ) & *.txt) o

38、ldname = c:Serverdatachats & fn newname = c:Serverdatachats( & r & ) & Date & 服务聊天记录 & .txt Name oldname As newname FileName = App.Path & & datachats( & r & ) & Date & 服务聊天记录 & .txt Open FileName For Output As #1 Print #1, Close #1 End If 下棋记录管理算法Private Sub baocun_Click()Dim C As StringCommo

39、nDialog1.Filter = Text Files(*.TXT)|*.txtCommonDialog1.FilterIndex = 1CommonDialog1.ShowSavefname = CommonDialog1.FileNameOn Error GoTo nohandle Open fname For Output As #1 For i = 1 To 400 Print #1, intx(i); Next i Print #1, For i = 1 To 400 Print #1, inty(i); Next i Print #1, For i = 0 To 19 For j

40、 = 0 To 19 Print #1, table(i, j); Next j Next i Print #1, Print #1, blackturn Print #1, intstep Print #1, color For i = 1 To 400 C = intcolor(i) Print #1, C Next i Print #1, Close #1nohandle: Exit SubEnd Sub第四章 软件测试4.1 登陆界面设计登陆窗体Login如图4.1所示:图4.14.2 下棋界面设计窗体frmserver如图4.2所示:图4.2第五章 软件测试为了保证软件的质量和可靠性

41、,在软件编码完成以后,应该对软件进行测试。测试出程序中存在的错误,然后进行修改。5.1 问题的发现1) 客户端和服务器端不能够联机。2) 运行时直接运行游戏下棋主窗体,没有运行登陆窗体。3) 信息窗口显示下棋信息也显示聊天信息。4) 在做申请悔棋和接受对方悔棋时程序段存在错误。5) 游戏进行了会出现各种中断或者是程序员没有预想的状态。5.2 问题的解决1) 客户端里的tcpClient.RemoteHost应该是服务器端的IP地址,而且客户端和服务器端两个的端口应该设置为一样,此程序LocalPort为1000。2) 首先在工程中建立一个Module的类模块,使登陆窗体和下棋主窗体衔接起来,并

42、且修改工程的属性,在“通用”设置里把启动对象设置为“Sub Main”,这样就解决了窗体运行的问题。3) 客户端和服务器端设置统一的信息数据格式,对通讯信息进行了加工,属于聊天信息是以“LT”开头,属于下棋信息的是以“XQ”开头,这样就避免了双方通讯信息的错乱。4) 做一个允许对方悔棋的子程序和一个己方申请悔棋的子程序,这样就是编程简单化,逻辑性强些,从而解决了程序运行不了的问题。5) 针对这个问题,增添了没有连接时用户点棋盘会弹出未连接提示、规定时间内没有连接上会提示重新连接的提示,还有清空聊天内容、重开棋局等功能,使用户体验程序时感觉更加良好,减少BUG。第六章 总结与体会6.1 总结本设计主要是采用TCP/IP网络协议为主要通讯协议建构服务器端,使用VB提供的Winsock控件来实现与客户端的网络通信功能和建立五子棋游戏界面。主要功能是使客户端能连接到服务器端,双方可以通过网络对战,并且能够自动判断胜负。特点是支持双方网上聊天功能,还增添了悔棋、复盘、保存棋局/聊天记录等功能。本软件设计和其它网络五子棋软件相比在功能和性能还是存在着比较大的差距的,例如:只能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论