首页 vb6winsock范例 (20页)

vb6winsock范例 (20页)

举报
开通vip

vb6winsock范例 (20页)vb6winsock范例vb6winsock范例篇一:VB中使用WinSock控件编写网络程序VB中使用WinSock控件编写网络程序WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。可能的用途创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。创建“聊...

vb6winsock范例 (20页)
vb6winsock范例vb6winsock范例篇一:VB中使用WinSock控件编写网络程序VB中使用WinSock控件编写网络程序WinSock控件能够通过UDPMATCH_ word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 _1714204002307_2(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。可能的用途创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。创建“聊天”程序。协议的选择当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连接状态:TCP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接;UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议的问题:当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这种连接会占用的更多的处理器资源,成本也会更高一些。数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。协议的配置配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样:Winsock1.Protocol=sckTCPProtocol确定你的计算机名创建服务端程序下面是创建一个简单服务端程序的步骤:创建一个 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 EXE工程;把默认窗体(Defaultform)的名字改为frmServer;把form的标题(caption)改为TCPServer;把Winsock控件拉到窗体中,并命名为tcpServer;在窗体中添加2个文本框,分别命名为txtSendData和txtOutput?在窗体中加入下列代码;PrivateSubForm_Load()'SettheLocalPortpropertytoaninteger.'TheninvoketheListenmethod.tcpServer.LocalPort=1001tcpServer.ListenfrmClient.Show'Showtheclientform.EndSubPrivateSubtcpServer_ConnectionRequest_(ByValrequestIDAsLong)'Checkifthecontrol'sStateisclosed.Ifnot,'closetheconnectionbeforeacceptingthenew'connection.IftcpServer.State<>sckClosedThen_tcpServer.Close'AccepttherequestwiththerequestID'parameter.tcpServer.AcceptrequestIDEndSubPrivateSubtxtSendData_Change()'TheTextBoxcontrolnamedtxtSendData'containsthedatatobesent.Whenevertheuser'typesintothetextbox,thestringissent'usingtheSendDatamethod.tcpServer.SendDatatxtSendData.TextEndSubPrivateSubtcpServer_DataArrival_(ByValbytesTotalAsLong)'Declareavariablefortheincomingdata.'InvoketheGetDatamethodandsettheText'propertyofaTextBoxnamedtxtOutputto'thedata.DimstrDataAsStringtcpServer.GetDatastrDatatxtOutput.Text=strDataEndSub上面就是创建一个简单的服务端应用程序的过程。然而,要完成整个过程,你还得创建一个客户端程序。创建TCP客户端程序在工程中添加一个新的窗体(form),并命名为frmClient;将窗体的标题(caption)改为TCPClient;添加一个Windsock控件到窗体中,命名为tcpCllient;添加2个文本框控件到frmClient窗体,分别命名为txtSend和txtOutput;添加一个按钮控件(CommandButton)到窗体,命名为cmdConnecti;将按钮控件标题(caption)改为Connect;在窗体中添加下面代码:注:确保将远程主机属性(RemoteHostproperty)改为你的计算机别名。PrivateSubForm_Load()'ThenameoftheWinsockcontrolistcpClient.'Note:tospecifyaremotehost,youcanuse'eithertheIPaddress(ex:"121.111.1.1")or'thecomputer's"friendly"name,asshownhere.tcpClient.RemoteHost="RemoteComputerName"tcpClient.RemotePort=1001EndSubPrivateSubcmdConnect_Click()'InvoketheConnectmethodtoinitiatea'connection.tcpClient.ConnectEndSubPrivateSubtxtSendData_Change()tcpClient.SendDatatxtSend.TextEndSubPrivateSubtcpClient_DataArrival_(ByValbytesTotalAsLong)DimstrDataAsStringtcpClient.GetDatastrDatatxtOutput.Text=strDataEndSub以上代码就能创建一个简单的客/服应用程序。要试着让两者建立连接,可以运行工程,单击Connect。在任意一个txtSendData文本框中输入文本,同样的文本信息就会出现在另一个窗体的txtOutput文本框中出现。接受多个连接请求上面介绍的服务端程序智能接受一个连接请求。但是,通过创建一组控件,并使用同样的控件来接受多个连接请求也是可能的。在这种情况下,你不需要关闭连接,只要创建新的控件实例(通过配置它的索引属性),调用新的实例中的接受方法。下面的代码中,假定在一个叫sckServer的窗体中有一个Winsock控件,它的索引属性设置为0。这样这个控件就是控件数组的一部分。在声明段中,生命一个模块级变量intMax。在窗体的载入事件中,intMax被设置为0,数组中第一个控件的本地端口属性被设置为1001。监听方法在控件中被调用,它被作为“监听控件”。每个连接请求到来时,代码会测试看它的索引(Index)是否为0(监听控件的值),如果是0,监听控件中intMax值增1,并用这个值创建新的控件实例。新的控件实例被用来接受连接请求。PrivateintMaxAsLongPrivateSubForm_Load()intMax=0sckServer(0).LocalPort=1001sckServer(0).ListenEndSubPrivateSubsckServer_ConnectionRequest_(IndexAsInteger,ByValrequestIDAsLong)IfIndex=0ThenintMax=intMax+1LoadsckServer(intMax)sckServer(intMax).LocalPort=0sckServer(intMax).AcceptrequestIDLoadtxtData(intMax)EndIfEndSubUDP连接入门创建一个UDP应用程序比创建TCP程序更简单,因为UDP协议不需要一个确定的连接。在上面的TCP应用程序中,其中一个Winsock控件必须明确的被设置为“监听”,而另一个必须用连接方法发起连接。相反,UDP协议不需要明确的连接。要在2个控件之间传送数据,(连接的双方)必须完成三个步骤:确定远程主机属性为对方的计算机名;确定远程主机属性为第二个控件的本地端口属性;调用约定方法指定要被使用的本地端口。(下面将详细讨论该方法)创建一个的UDP连接端创建一个标准EXE工程;将默认窗体命名为frmPeerA;在窗体中添加一个Winsock控件,命名为udpPeerA;在属性(Properties)页,单击协议(Protocol),改为UDPProtocol;添加2个文本框控件窗体中,分别命名为txtSend和txtOutput;在窗体中添加下面代码:PrivateSubForm_Load()'Thecontrol'snameisudpPeerAWithudpPeerA'IMPORTANT:besuretochangetheRemoteHost'valuetothenameofyourcomputer..RemoteHost="PeerB".RemotePort=1001'Porttoconnectto..Bind1002'Bindtothelocalport.篇二:VB网络编程中Winsock的使用VB网络编程中Winsock的使用2006-04-0714:52:23来源:网易学院(广州)网友评论0条论坛如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。换句话说,Winsock控件是在后台运行的一种控件。在执行过程之中,不会具有任何选用、可见的控件。那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容,是这个控件可以应用的大致范围:?将客户端所收集的数据,传送给主机端。?点对点的文件传送。?聊天室应用程序。?电子公告栏。?voip(voiceoverTCP/ip)因此,当您希望建立上述类型的应用程序之前,必须要学习如何选用适合的协议类型。2-1如何选用适用的协议当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。如同先前所述的,您可以选择TCP协议或是UDP协议中的一种。但是这两种协议的差异点在哪里呢?虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。以下是这两种协议的特点说明:?TCP协议是属于面向连接的协议。所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。同时,在网络的基础理论之中,都会特别强调TCP具有错误核对的功能。也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。?UDP协议是属于无面向连接协议。这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。此外,使用UDP协议的最大数据传送量,完全取决于网络的传输量。因此,此种协议较为适用于局域网络。因此,当您在建立应用程序并且选用适当的协议之前,务必先依据应用程序使用的环境来选择适用的协议。2-2设置协议当已经选择好适当的协议之后,接下来,将必须要设置协议的类型。在VisableBasic之中,共有两种设置协议的方式:“修改属性窗口”以及“程序代码设置”。以下是这两种设置方式的说明。?修改属性窗口(见图2-1)?程序代码设置Winsock1.Protocol=sckTCPProtocol3.TCP连接的基础在使用TCP协议来建立应用程序的过程中,首先必须决定应用程序是属于主机端是客户端来决定应用程序所扮演的角色问题。因此,在建立应用程序的过程中,如果您选择“主机端”时,主机端的Winsock控件必须将特定的连接端口号设置在监听模式之中。同时,在客户端提出连接的请求时,主机端可以允许客户端的连接请求,并且完成连接的程序。因此,一旦主机端与客户端连接成功之后,在这个部设备之间即可开始传送数据,以下的程序代码,具有TCP连接的基本聊天室功能。3-1TCP连接范例在此笔者只做简单的-程序介绍,?frmserver窗体的设计内容如图3-1所示?frmserver的程序代码privatesubform_load()?设置本机连接端口的localport属性的内容?请注意!必须是整体值tcpserver.LocalPort=2000?将本机连接端口设置为监听模式tcpserver.ListenMe.Caption=”frmsever”Label1.Caption=”传送的文字“Label2.Caption=”接收的文字“?打开frmclient窗体frmClient.Showendsubprivatesubtcpserver_connectioequest(byvalrequestidaslong)?如果tcpserver控件的状态目前不是处于关?闭的状态时,在允许远程设备连接时,必须要关闭目前的控制的运行iftcpserver.state<>sckclosedthentcpserver..close?允许远程设备使用必要的识别码(requestid)与主机进行连接tcpserver.acceptrequestidendsubprivatesubtxtsend_change()?当txtsend控件的内容发生变化时,将txtsend控件的内容,通过tcpserver控件senddata方?法,将txtsend控件的内容传送给frmclienttcpserver.senddatatxtsend.textendsubprivatesubtcpserver_dataarrival(byvalbytestotalaslong)?声明即将接收的数据类型dimstrdataasstring?调用tcpserver控件的getdata方法,将接收的数据以vbstring数据类型,存放在strdata变量之中。Tcpserver.getdatastrdata,vbstring篇三:VBWinsock控件TCP与UDP连接实例利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议(UDP)或者传输控制协议(TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与Timer控件类似,WinSock控件在运行时是不可见的。可能的用途???创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。创建一个服务器应用程序,作为多个用户的数据的汇入点。创建“聊天”应用程序。选择通讯协议在使用WinSock控件时,首先需要考虑使用什么协议。可以使用的协议包括TCP和UDP。两种协议之间的重要区别在于它们的连接状态:?TCP协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。?UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议:1.在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用TCP协议,在收发数据之前先建立明确的连接。2.数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。3.数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 某个计算机,UDP协议是更适宜的。UDP协议适合发送少量的数据。协议的设置在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择sckTCPProtocol或者sckUDPProtocol。也可以使用程序代码来设置Protocol属性,如下所示:Winsock1.Protocol=sckTCPProtocol确定计算机的名称在与远程计算机相连接的时候,需要知道它的IP地址或者它的“好听的名字”。IP地址是一串数字,每三个数字为一组,中间用点隔开(形如xxx.xxx.xxx.xxx)。通常,最易记住的是计算机的“好听的名字”。要确定计算机的名字,请按照以下步骤执行:1.在计算机的“任务栏”上,单击“启动”。2.在“设置”项中,单击“控制面板”。3.双击“网络”图标。4.单击“标识”选项卡。5.在“计算机名称”框中可以找到计算机的名称。上面找到的计算机名称可以作为RemoteHost属性的值。TCP连接初步如果应用程序要使用TCP协议,那么首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。下列步骤创建一个非常简单的服务器:要创建一个TCP服务器,请按照以下步骤执行:1.创建新的StandardEXE工程。2.将缺省窗体的名称改为frmServer。3.将窗体的标题改为“TCP服务器”。4.在窗体中放入一个Winsock控件,并将它的名字改为tcpServer。5.在窗体上添加两个TextBox控件。将第一个命名为txtSendData,第二个为txtOutput。6.为窗体添加如下的代码。VBScriptcode复制代码PrivateSubForm_Load()'将LocalPort属性设置为一个整数。'然后调用Listen方法。tcpServer.LocalPort=1001tcpServer.ListenfrmClient.Show'显示客户端的窗体。EndSubPrivateSubtcpServer_ConnectionRequest_(ByValrequestIDAsLong)'检查控件的State属性是否为关闭的。'如果不是,'在接受新的连接之前先关闭此连接。IftcpServer.State<>sckClosedThen_tcpServer.Close'接受具有requestID参数的'连接。tcpServer.AcceptrequestIDEndSubPrivateSubtxtSendData_Change()'名为txtSendData的TextBox控件中'包含了要发送的数据。当用户往文本框中'键入数据时,使用SendData方法'发送输入的字符串。tcpServer.SendDatatxtSendData.TextEndSubPrivateSubtcpServer_DataArrival_(ByValbytesTotalAsLong)'为进入的数据声明一个变量。'调用GetData方法,并将数据赋予名为txtOutput'的TextBox的Text属性。DimstrDataAsStringtcpServer.GetDatastrDatatxtOutput.Text=strDataEndSub上面的步骤创建了一个简单的服务器应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。要创建TCP客户端,请按照以下步骤执行:1.在工程中添加一个新的窗体,将其命名为frmClient。2.将窗体的标题改为“TCPClient”。3.在窗体中添加一个Winsock控件,并将其命名为tcpClient。4.在frmClient中添加两个TextBox控件。将第一个命名为txtSend,第二个为txtOutput。5.在窗体上放一个CommandButton控件,并将其命名为cmdConnect。6.将CommandButton控件的标题改为Connect。7.在窗体中添加如下的代码。重点必须将RemoteHost属性值修改为您的计算机的名字。VBScriptcode复制代码PrivateSubForm_Load()'Winsock控件的名字为tcpClient。'注意:要指定远程主机,可以使用'IP地址(例如:"121.111.1.1"),也可以使用'计算机的“好听的名字”如下所示。tcpClient.RemoteHost="RemoteComputerName"tcpClient.RemotePort=1001EndSubPrivateSubcmdConnect_Click()'调用Connect方法,初始化连接。tcpClient.ConnectEndSubPrivateSubtxtSendData_Change()tcpClient.SendDatatxtSend.TextEndSubPrivateSubtcpClient_DataArrival_(ByValbytesTotalAsLong)DimstrDataAsStringtcpClient.GetDatastrDatatxtOutput.Text=strDataEndSub上面的代码创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行工程,然后单击“连接”。在两个窗体之一的txtSendData文本框中键入文本,可以看到同样的文字将出现在另一个窗体的txtOutput文本框中。接受多个连接请求上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用Accept方法。下面的代码假定名为sckServer的窗体上有一个Winsock控件,它的Index属性被设置为0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量intMax。在窗体的Load事件中,intMax被设置为0,数组中第一个控件的LocalPort属性被设置为1001。然后调用控件的Listen方法,使之成为“监听”控件。在连接请求到达时,代码将检测Index是否为0(“监听”控件的值)。如果为0,监听控件将增加intMax的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。VBScriptcode复制代码PrivateintMaxAsLongPrivateSubForm_Load()intMax=0sckServer(0).LocalPort=1001sckServer(0).ListenEndSub篇四:vbwinsock汇总我很早就想写些技术的东东了,但好久都没有写,因为没有时间,自己又很累,又有点懒,但是,看到我的同事和朋友们的技术提高不是很快,就把我掌握的编程技术 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 下来,以便我的朋友们能学到好的东西。我也奉劝看过我的BLOG的朋友们,把自己知道的计算机知识,告诉你认识的人吧,因为,计算机知识更新太快,很容易过时,所以,废弃的也快。好了,进入我的VBSocket编程。(鼠标又坏了,尽量少些文字介绍主要的做法)关于客户端和服务器端的通信先介绍客户端程序的做法:首先,要建立客户端的工程。要把Winsock控件引用到工程中,做法:菜单[工程]->[部件]->Micorosoftwinsockcontrols6.0在画面上添加1个Winsock控件:命名:winsockClient属性Protocol设定0-sckTCPProtocol客户端连接:winsockClient.Close'IPwinsockClient.RemoteHost="192.168.1.105"'PortwinsockClient.RemotePort='20000'ConnectwinsockClient.Connect客户端送信:IfwinsockClient.State=sckConnectedThenwinsockClient.SendDataDataElse'errorCallShowMessageEndIf客户端接收数据:PrivateSubwinsockClient_DataArrival(ByValbytesTotalAsLong)'接收winsockClient.GetDataReceive'IfwinsockClient.State=sckConnectedThen'再送信winsockClient.SendDatabytSendElse'ErrorCallShowMessageEndIfEndSub客户端winsockClient的Error处理:PrivateSubwinsockClient_Error(ByValNumberAsInteger,DescriptionAsString,ByValScodeAsLong,ByValSourceAsString,ByValHelpFileAsString,ByValHelpContextAsLong,CancelDisplayAsBoolean)OnErrorResumeNext'连接不能的情况下IfwinsockClient.State<>sckConnectedThen。。。。winsockClient.CloseExitSubEndIfEndSub客户端winsockClient的Close处理:PrivateSubwinsockClient_Close()winsockClient.CloseEndSub好了,上面就是客户端的主要程序点,下面介绍服务端的做法。建立服务端的工程,在画面上添加2个Winsock控件:命名:winScokListen属性Protocol设定0-sckTCPProtocol(专门用于监听)命名:winSocktSend属性Protocol设定0-sckTCPProtocol(专门用于通信)这里简单介绍一下,这2个Winsock控件,一个专门用于监听,一个专门用于通信,就是防止服务端不必再启动,客户端就可以很方便的连接和断开。要是用一个的话,做不到这一点(除非很变态的做法)。服务端启动并监听客户端连接:winScokListen.ClosewinSocktSend.ClosewinScokListen.Protocol=sckTCPProtocolwinScokListen.LocalPort=20000winScokListen.Listen服务端监听到客户端的连接并接受PrivateSubwinScokListen_ConnectionRequest(ByValrequestIDAsLong)winSocktSend.AcceptrequestIDEndSub服务端接收和送信PrivateSubwinSocktSend_DataArrival(ByValbytesTotalAsLong)OnErrorResumeNext'接收winSocktSend.GetDataReceiveIfwinSocktSend.State=sckConnectedThen'送信winSocktSend.SendDataSendElse'ErrorCallShowMessageEndIfEndSubWinscok的关闭:PrivateSubwinScokListen_Close()winScokListen.CloseEndSubPrivateSubwinSocktSend_Close()winSocktSend.CloseEndSub上面2个工程,主要的功能做法就这样,其他的自己加入。编译后,就可以了。.·荐coa范例·荐渝建竣填写范例·荐再审材料清单范例·荐个人评议范例·荐托物寓意范例
本文档为【vb6winsock范例 (20页)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥16.9 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
万用文库
暂无简介~
格式:doc
大小:29KB
软件:Word
页数:0
分类:
上传时间:2020-06-29
浏览量:103