《网络编程技术(西电课件)_第6章.ppt》由会员分享,可在线阅读,更多相关《网络编程技术(西电课件)_第6章.ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第第6章章开发开发Internet应用程序应用程序 Internet应用程序的开发通常包括应用程序的开发通常包括Internet服务端和客户端的应用程序,服务端和客户端的应用程序,Microsoft提供了大量的提供了大量的API函数来支持这函数来支持这两种程序,客户端应用程序主要通过两种程序,客户端应用程序主要通过Internet协议协议(如如Gopher,FTP,HTTP等等)来从来从网络服务器上获取数据,提供访问网络服务器上获取数据,提供访问Internet的功能,服务器端应用程序则用的功能,服务器端应用程序则用来支持来支持HTTP、FTP或或Gopher等类型的服等类型的服务务你了解F
2、TP协议吗?2你了解FTP协议吗?3FTP客户端 =TCP客户端+固定文字响应规范FTP协议4服务器回显服务器回显客户端客户端TCP连接连接x.x.x.x21根据回显输入根据回显输入Connectingtox.x.x.x,Port21Connected.Waitingforresponse.220MicrosoftFTPServiceUSERuser1331Passwordrequiredforuser1.PASSxxxxxx230Useruser1loggedin.LIST150OpeningASCIImodedataconnectionfor/bin/ls.226Transfercompl
3、ete.Transferdone:125bytesin0.016secs(7.81k/sec)GETfile.txt这是第五章利用这是第五章利用CAsyncSocket类实现的类实现的TCP客户端客户端按照按照FTP协议要求,给协议要求,给FTP服务器发送用户名服务器发送用户名106.1 Internet应用程序开发的几种类型应用程序开发的几种类型 使用使用WinInet类开发类开发Internet应用程序:应用程序:WinInet类支持类支持HTTP、FTP和和Gopher等标准的协议等标准的协议 使用使用Windows Socket开发开发Internet应用程序:应用程序:Winsock
4、标准定义了一个标准定义了一个DLL接口来连接接口来连接Internet,MFC使用使用CAsyncSocket和和CSocket类对接口进行了封装。类对接口进行了封装。使用消息收发使用消息收发API(MAPI:Message API)开发开发Internet应应用程序:用程序:使用使用MAPI可以很方便的向其他应用程序发可以很方便的向其他应用程序发送电子邮件、语音邮件或传真等功能送电子邮件、语音邮件或传真等功能 116.2WinInet开发简介开发简介用用WinInet开发程开发程序的优点序的优点 隐藏协议细节,简化编程:隐藏协议细节,简化编程:可不必深入了解协议,而可不必深入了解协议,而使用
5、使用WinSocket编程,需理解网络通信及协议基本原理编程,需理解网络通信及协议基本原理 熟悉的编程接口:熟悉的编程接口:WinInet API函数和很多函数和很多WinAPI函数很函数很相似,这对有编程经验的程序员来说是很方便的。相似,这对有编程经验的程序员来说是很方便的。稳定性好,不要求程序与底层直接联系:稳定性好,不要求程序与底层直接联系:WinInet隐藏隐藏了协议的具体细节,使得程序不必直接使用各种协议了协议的具体细节,使得程序不必直接使用各种协议支持数据缓存:支持数据缓存:WinInetWinInet函数为所有的协议提供缓存能函数为所有的协议提供缓存能力,程序员只需关心数据而不用
6、去管理数据缓存力,程序员只需关心数据而不用去管理数据缓存支持多线程:支持多线程:由于由于WinInet函数在内部处理多线程的并函数在内部处理多线程的并发问题,因此发问题,因此WinInet函数支持多线程,在多线程中可函数支持多线程,在多线程中可以调用各种以调用各种WinInet函数而不用担心发生问题或死锁函数而不用担心发生问题或死锁 126.3WinInet类介绍类介绍WinInet类是一个总称,目前的版本中分为四组类是一个总称,目前的版本中分为四组CInternetSession类类CInternetConnection(连接类连接类)CFileFind类类(Internet文件查找类文件查
7、找类)CInternetFile类和类和CGopherLocator类类 136.3.1CInternetSession类类 CInternetSession类直接继承自类直接继承自CObject类,类,该类用来建立与某个该类用来建立与某个Internet服务器的会服务器的会话。还可以向代理服务器描述连接,如话。还可以向代理服务器描述连接,如果应用程序所使用的果应用程序所使用的Internet连接必须保连接必须保持一段时间,则可以在持一段时间,则可以在CWinApp类中创类中创建相应的建相应的CInternetSession成员成员 14QueryOption提供一个可能的错误检测判断提供一个
8、可能的错误检测判断SetOption设置设置Internet会话的选项会话的选项OpenURL设置设置URL,并对其进行分析,并对其进行分析GetFtpConnection打开一个打开一个FTP会话并进行连接会话并进行连接GetHttpConnection打开打开HTTP服务器并进行连接服务器并进行连接GetGopherConnection打开打开Gopher服务器并进行连接服务器并进行连接EnableStatusCallback建立异步操作的状态回调建立异步操作的状态回调ServiceTypeFromHandle 通过通过Internet句柄返回服务器类型句柄返回服务器类型GetContex
9、t获取获取Internet和应用程序会话句柄和应用程序会话句柄Close关闭关闭Internet连接连接CInternetSession类类成员函数成员函数156.3.2CInternetConnection类类 包括包括CInternetConnection类及其派生类类及其派生类CHttpConnection、CFtpConnection和和CGopherConnection类,类,这些类帮助用户管理与这些类帮助用户管理与Internet服务器的连接,服务器的连接,同时还提供一些函数完成和响应服务器的通同时还提供一些函数完成和响应服务器的通信信 16CInternetConnection:
10、用于管理与用于管理与Internet服务器的连接服务器的连接CFtpConnection:用用于于管管理理与与FTP服服务务器器的的连连接接,可可以以对服务器上的文件和目录进行直接操作对服务器上的文件和目录进行直接操作CGopherConnection:管理与管理与Gopher服务器的连接服务器的连接CHttpConnection:管理与管理与HTTP服务器的连接服务器的连接连接类及其连接类及其派生类派生类 176.3.3CInternetFile类类包包 括括 CInternetFile类类 及及 其其 派派 生生 类类 CHttpFile、CGopherFile。这这些些类类实实现现对对远
11、远程程系系统统上上的的文文件的存取工作。件的存取工作。文文 件件 类类 还还 包包 含含 CFileFind类类 及及 其其 派派 生生 类类CFtpFileFind、CGopherFileFind类类。CFileFind类类直直接接继继承承于于CObject类类,这这些些类类实实现现对对本本地地和和远程系统上的文件的搜索和定位工作。远程系统上的文件的搜索和定位工作。18CInternetFile:允允许许对对使使用用Internet协协议议的的远远程程系系统统中中的的文文件进行操作件进行操作CGopherFile:为为在在Gopher服服务务器器上上进进行行文文件件检检索索和和读读取取操作提
12、供支持操作提供支持CHttpFile:提供对提供对HTTP服务器上的文件进行操作的支持服务器上的文件进行操作的支持CFindFile:文文件检索提供支持文文件检索提供支持CFtpFileFind:为为在在FTP服服务务器器上上进进行行的的文文件件检检索索操操作作提提供支持供支持CGopherFileFind:为为在在Gopher服服务务器器上上进进行行的的文文件件检检索索操作提供支持操作提供支持文件类说明文件类说明 196.3.4CGopherLocator类类 在从在从Gopher服务器中获取信息之前,服务器中获取信息之前,必须先获得该服务器的定位器,而必须先获得该服务器的定位器,而CGop
13、herLocator类的主要功能就是从类的主要功能就是从Gopher服务器中得到定位并确定定位服务器中得到定位并确定定位器的类型器的类型。206.4用用WinInet类开发应用程序类开发应用程序编写支持编写支持Internet的应用程序一般步骤:的应用程序一般步骤:(1)创建一个创建一个CInternetSession对象:对象:由于由于Internet会话是通过会话是通过CInternetConection类的对象实现的,类的对象实现的,因此首先要创建一个因此首先要创建一个CInternetSession对象,建对象,建立一个立一个Internet会话。会话。(2)查询或设置查询或设置Int
14、ernet选项:选项:在连接时,有时还在连接时,有时还要查询或设置要查询或设置Internet 选项,这个工作可以通过选项,这个工作可以通过QueryOption或或SetOption函数来完成。这个步骤函数来完成。这个步骤是可选的。是可选的。21(3)建立与服务器的连接:建立与服务器的连接:客户应用程序要与服客户应用程序要与服务器协同工作,在创建了务器协同工作,在创建了CInternetSession对象对象后,就需要建立到服务器的连接。根据不同的后,就需要建立到服务器的连接。根据不同的协议,可选用协议,可选用GetFtpConnect、GetHttpConnect和和GetGopherCo
15、nnect三种方法中的一种。三种方法中的一种。(4)向用户反馈当前数据处理的进程信息:向用户反馈当前数据处理的进程信息:有时有时客户的应用程序在进行某些操作时,要耗费较客户的应用程序在进行某些操作时,要耗费较长的时间,因此需要向用户反馈当前的状态,长的时间,因此需要向用户反馈当前的状态,这个工作由这个工作由EnableStatusCallback函数来完成,此函数来完成,此时还要重载时还要重载OnStatusCallBack函数以实现回调函函数以实现回调函数的功能。数的功能。22(5)创建文件检索类对象,对服务器进行检索:创建文件检索类对象,对服务器进行检索:例如对于例如对于FTPFTP协议可
16、以调用协议可以调用CFTPFileFind类类来对来对FTPFTP服务器上的文件进行查询,然后全部列出来服务器上的文件进行查询,然后全部列出来(6)创建创建CInternetFile实例:实例:调用调用CInternetSession类的成员函数类的成员函数OpenURL建立与服务器的连接,建立与服务器的连接,函数返回一个函数返回一个CInternetFile指针。指针。(7)文件读写操作:文件读写操作:调用调用CInternetFile:Read或或CInternetFile:Write函数对所得到得服务器文件进函数对所得到得服务器文件进行读写操作。行读写操作。23(8)异常处理:异常处理:
17、为提高应用程序的可靠性和容错为提高应用程序的可靠性和容错性,必须对可能出现的问题进行处理,这种处性,必须对可能出现的问题进行处理,这种处理通常是通过调用理通常是通过调用CInternetException类的对象类的对象对目前可知的异常进行处理。对目前可知的异常进行处理。(9)结束:结束:调用调用CInternetSession:Close结束会话结束会话并销毁并销毁CInternetSession对象。对象。创建创建CInternetSession类对象类对象创创建建CInternetSession类类对对象象,将将创创建建并并初初始始化化Internet会会话话。像像其其它它类类一一样样,
18、创创建建CInternetSession类类对对象象需需要要执行该类的构造函数,它的原型是:执行该类的构造函数,它的原型是:CInternetSession(LPCTSTR pstrAgent=NULL,/标识标识所有者所有者 DWORD dwContext=1,/允允许许消息回消息回调调函数函数 DWORD dwAccessType=PRE_CONFIG_INTERNET_ACCESS,/注册表默注册表默认认 LPCTSTR pstrProxyName=NULL,/采用哪个代理采用哪个代理 LPCTSTR pstrProxyBypass=NULL,/跳跳过过某些某些 DWORD dwFlag
19、s=0);CInternetSession示例示例25CInternetSession*pSession;/定义会话对象指针变量定义会话对象指针变量pSession=newCInternetSession(/创建创建Internet会话类对象会话类对象AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);查询或设置查询或设置Internet请求选项请求选项创创建建CInternetSession类类对对象象后后,可可以以调调用用 它它 的的 QueryOption成成 员员 函函 数数 查查 询询Internet请请求求选选项项,调调用用它它的的SetOp
20、tion成成员函数来设置这些选项。员函数来设置这些选项。创建连接类对象创建连接类对象通过调用通过调用CInternetSession对象的对象的GetFtpConnection、GetHttpConnection、GetGopherConnection成员函数,可以成员函数,可以分别建立分别建立CInternetSession对象与网络上对象与网络上FTP、HTTP、和、和GOPHER服务器的连接。服务器的连接。并分别创建并分别创建CFtpConnection、CHttpConnection、CGopherConnection类的对象,来代表这类的对象,来代表这三种连接。三种连接。28CFtp
21、Connection*pConnection;/定义连接对象指针变量定义连接对象指针变量/pSession是已建立的是已建立的CInternetSession类实例类实例/m_strFtp存放了存放了FTP服务器域名服务器域名/m_strName存放了用户名存放了用户名/m_strPwd存放了密码存放了密码pConnection=pSession-GetFtpConnection(m_strFtp,m_strName,m_strPwd);创建连接类的示例创建连接类的示例使用文件检索类使用文件检索类CFtpFileFind类和CGopherFileFind类分别封装了对于FTP和Gopher服务
22、器的文件检索操作。它们的基类是CFileFind类。创建了连接对象后,可以进一步创建文件检索类对象,并使用该对象的方法实现对服务器的文件检索。创建文件检索类的对象实例创建文件检索类的对象实例一一般般直直接接调调用用CFtpFileFind类类的的构构造造函函数数创创建建该该类类的的对对象象实实例例。应应当当将将前前面面所所创创建建的的FTP连连接接对对象象指指针针作为参数。构造函数的原型是:作为参数。构造函数的原型是:CFtpFileFind(CFtpConnection*pConnection,/连接对象指针连接对象指针DWORDdwContext=1);/表示此操作的环境值表示此操作的环境
23、值例如:例如:CFtpFileFind*pFileFind;/pConnection是已是已经经建立的建立的CInternetSessionpFileFind=newCFtpFileFind(pConnection);检索第一个符合条件的对象检索第一个符合条件的对象使使用用CFtpFileFind类类的的FindFile成成员员函函数数可可以以在在FTP服服务务器器上上或或本本地地缓缓冲冲区区中中找找到到第第一一个个符符合条件的对象。合条件的对象。virtualBOOLFindFile(LPCTSTRpstrName=NULL,/指指定定要要查查找找/的文件路径,可以使用通配符。例如的文件路径
24、,可以使用通配符。例如“*.*”DWORDdwFlags=INTERNET_FLAG_RELOAD);/从哪里检索从哪里检索/默认从网上获取,即使本地缓冲区中有信息默认从网上获取,即使本地缓冲区中有信息查询符合条件的实例查询符合条件的实例32BOOLbContinue;/存放返回值存放返回值/pFileFind存放了存放了CFtpFileFind对象实例对象实例bContinue=pFileFind-FindFile(*.txt);/查找服务查找服务器上当前目录的器上当前目录的txt文件文件继续查找其它的符合条件的对象继续查找其它的符合条件的对象在在上上一一步步的的基基础础上上,反反复复地地调
25、调用用FindNextFile成成员员函函数数,可可以以找找到到所所有有符符合合条条件件的的对对象象。直直到到函函数数返返回回FALSE为为止止。FindNextFile用用于于继继续进行续进行FindFile调用的文件检索操作。调用的文件检索操作。virtualBOOLFindNextFile();每每查查到到一一个个对对象象,随随即即调调用用GetFileURL成成员员函函数,可以获得已检索到的对象的数,可以获得已检索到的对象的URL。CStringGetFileURL()const;其它可用的成员函数其它可用的成员函数CFtpFileFind类本身定义的成员函数只有上面几类本身定义的成员
26、函数只有上面几个。但是由于它是从个。但是由于它是从CFileFind类派生的,它继类派生的,它继承基类承基类CFileFind的许多成员函数,例如的许多成员函数,例如GetCreationTimeGetFileNameGetFilePathGetFileTitleGetLastAccessTimeGetLastWriteTimeGetLength等等,可以进行等等,可以进行各种文件检索相关的操作。各种文件检索相关的操作。6.5一个文件查找的例子一个文件查找的例子35l输入输入FTP服务器域名服务器域名l输入用户名、密码输入用户名、密码l可以查询到可以查询到FTP服务器中的目录和文件列表服务器中
27、的目录和文件列表l可以上传、下载文件可以上传、下载文件36373839编辑框编辑框1IDC_EDIT_SERVERNAME编辑框编辑框2IDC_EDIT_NAME编辑框编辑框3IDC_EDIT_PASSWORD下压式按钮下压式按钮IDC_BUTTON_CHECK下压式按钮下压式按钮IDC_ BUTTON _UPLOAD下压式按钮下压式按钮IDC_ BUTTON _DOWNLOAD下压式按钮下压式按钮IDC_BUTTON_QUIT列表框列表框IDC_LIST_FILE4041在对话框添加声明在对话框添加声明CInternetSession变量变量424344关键关键1步:创建步:创建CInter
28、netSession对象对象454647voidCFtpDlg:OnButtonCheck()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(!m_ServerName.IsEmpty()/如果用户有输入才登陆如果用户有输入才登陆FTP服务器查找服务器查找CFtpConnection*FtpConn=m_Session-GetFtpConnection(m_ServerName,m_Name,m_Password);/从从CInternetSession中建立中建立FTP连接连接CFtpFileFind*pF
29、tpFind=newCFtpFileFind(FtpConn);/从从FTP连接中建立连接中建立FTP文件查找类实例文件查找类实例BOOLbContinue=pFtpFind-FindFile(*.*);if(!bContinue)/如果一个文件都找不到,结束查找如果一个文件都找不到,结束查找pFtpFind-Close();pFtpFind=NULL;/创建创建FTP连接类对象连接类对象48pFtpFind-FindNextFile();/MSDN上讲述,在上讲述,在GetFileName()之前之前/必须调用一次必须调用一次FindNextFile(),故原书上的例子有错,故原书上的例子有
30、错CStringstrFileName;while(bContinue)/找到了第一个文件,继续找其它的文件找到了第一个文件,继续找其它的文件strFileName=pFtpFind-GetFileName();/获得找到的文件的文获得找到的文件的文件名件名/如果找到的是否目录,将目录名放在括弧中如果找到的是否目录,将目录名放在括弧中if(pFtpFind-IsDirectory()strFileName=+strFileName+;/将找到的文件或目录名显示在列表框中。将找到的文件或目录名显示在列表框中。m_ListFile.AddString(strFileName);bContinue=
31、pFtpFind-FindNextFile();/查找下一个文件查找下一个文件/其他处理,比如用完之后的连接关闭等等其他处理,比如用完之后的连接关闭等等49FTP工具503COM3CDaemonServ-UFTPServer建议大家回去试试建议大家回去试试小结51lTCP协议客户端能完成协议客户端能完成FTP协议客户协议客户端的功能,但是必须先了解端的功能,但是必须先了解FTP协议协议l同理,同理,TCP协议服务器能完成协议服务器能完成FTP协协议服务器的功能议服务器的功能l利用利用Socket开发开发FTP这样的常见协议这样的常见协议软件有点复杂,直接利用软件有点复杂,直接利用FTP相关类更
32、相关类更方便些方便些526.6WinInet类编程实例类编程实例 这一次我们要利用这一次我们要利用WinInet类编写类编写Internet应用程应用程序,完成序,完成3种协议。在种协议。在URL编辑框中写入地址,编辑框中写入地址,单击单击“Http”、“Ftp”或或“Gopher”等按钮等按钮可在编辑框中显示查询到的相应服务器的信可在编辑框中显示查询到的相应服务器的信息息 编辑框编辑框1IDC_EDIT_URL编辑框编辑框2IDC_EDIT_RESULT下压式按钮下压式按钮IDC_BUTTON_HTTP下压式按钮下压式按钮IDC_ BUTTON _FTP下压式按钮下压式按钮IDC_ BUTT
33、ON _GOPHER下压式按钮下压式按钮IDC_BUTTON_QUIT静态文本静态文本IDC_STATIC组框组框IDC_STATIC53给界面对象连接接变量给界面对象连接接变量 54(a)给应用程序增加一个自定义的类,单击给应用程序增加一个自定义的类,单击InsertNew Class菜单,添加新类类名为菜单,添加新类类名为CMyWinInetClass,系统会自,系统会自动在项目中增加动在项目中增加MyWinInetClass.cpp和和MyWinInetClass.h两两个文件个文件 55(b)在在新新加加入入的的类类中中增增加加如如下下三三个个public的的成成员员函函数数,在在头头
34、文文件件MyWinInetClass.h中中可可看看到到这这些些函数。函数。CStringConnectFtp(constCStringsUrl);/完成连接完成连接Ftp功能的函数功能的函数CStringConnectHttp(constCStringsUrl);/完成连接完成连接Http功能的函数功能的函数CStringConnectGopher(constCStringsUrl);/完成连接完成连接Gopher功能的函数功能的函数56为为了了建建立立Internet的的会会话话,新新增增加加的的CmyWinInetClass类类中加入一个中加入一个private型成员变量型成员变量m_s
35、ession:CInternetSessionm_session;/建立建立Internet会话会话由由于于在在上上面面定定义义了了一一个个CWinInet类类的的对对象象,所所以以还还需需要在要在MyWinInetClass.h头文件中加入如下代码:头文件中加入如下代码:#includeafxinet.h#includewininet.h57为为CMyWinInetClass类添加三个用于连接的成员函数,它类添加三个用于连接的成员函数,它们分别是们分别是ConnectFtp、ConnectHttp和和ConnectGopher。CString CMyWinInetClass:ConnectF
36、tp(const CString sUrl)CStringsResult;/存储连接信息的字符串存储连接信息的字符串CFtpConnection*Ftpconnection=NULL;sResult=;sResult=sResult+TryingtoconnectFtpsites+sUrl+rn;Ftpconnection=m_session.GetFtpConnection(sUrl);/建立到建立到Ftp服务器的连接服务器的连接58if(Ftpconnection)sResult=sResult+Connectionestablished.rn;CStringsCurDir;Ftpconn
37、ection-GetCurrentDirectory(sCurDir);/得到得到Ftp服务器的当前目录服务器的当前目录sResult=sResult+currentdirectoryis+sCurDir+rn;Ftpconnection-Close();/关闭连接关闭连接elsesResult=sResult+TherearesomeerrorsinfindingthisFtpsites;returnsResult;59CString CMyWinInetClass:ConnectHttp(const CString sUrl)CStringsResult;CInternetFile*hHt
38、tpFile=NULL;sResult=;sResult=sResult+TryingtoconnectHttpsites+sUrl+rn;hHttpFile=(CInternetFile*)m_session.OpenURL(sUrl);/得到文件指针得到文件指针if(hHttpFile)sResult=sResult+Connectionestablished.rn;CStringsLine;while(hHttpFile-ReadString(sLine)/读取读取Http服务器上的内容服务器上的内容sResult=sResult+sLine+rn;hHttpFile-Close();/
39、关闭连接关闭连接elsesResult=sResult+TherearesomeerrorsinfindingthisHttpsites;returnsResult;60CString CMyWinInetClass:ConnectGopher(const CString sUrl)CStringsResult;CInternetFile*hGopherFile=NULL;sResult=;sResult=sResult+TryingtoconnectGophersites+sUrl+rn;hGopherFile=(CInternetFile*)m_session.OpenURL(sUrl);
40、/得到文件指针得到文件指针if(hGopherFile)sResult=sResult+Connectionestablished.rn;CStringsLine;while(hGopherFile-ReadString(sLine)/读取读取Gopher服务器内容服务器内容sResult=sResult+sLine+rn;hGopherFile-Close();/结束连接结束连接elsesResult=sResult+TherearesomeerrorsinfindingthisGophersites;returnsResult;61在在CMyInternetDlg类中增加一个类中增加一个p
41、ublic成员变量成员变量CMyWinInetClassm_WinInetClass;变量变量m_WinInetClass是是CMyWinInetClass类的一个类的一个对象,所以还要在对象,所以还要在WinInetDlg.h头文件加入自定头文件加入自定义类的头文件:义类的头文件:#includeMyWinInetClass.h62三个消息处理函数增加代码如下:三个消息处理函数增加代码如下:void CWinInetDlg:OnButtonFtp()UpdateData(TRUE);/从对话框读入地址信息从对话框读入地址信息m_Urlm_EditResult=;/调用自定义类的成员函数,连接
42、调用自定义类的成员函数,连接Ftp服务器,服务器,m_Url为地址为地址m_EditResult=m_EditResult+m_WinInetClass.ConnectFtp(m_Url);UpdateData(FALSE);void CWinInetDlg:OnButtonHttp()UpdateData(TRUE);/从对话框读入地址信息从对话框读入地址信息m_Urlm_EditResult=;/调用自定义类的成员函数,连接调用自定义类的成员函数,连接Http服务器,服务器,m_Url为地址为地址m_EditResult=m_EditResult+m_WinInetClass.ConnectHttp(m_Url);UpdateData(FALSE);63void CWinInetDlg:OnButtonGopher()UpdateData(TRUE);/从对话框读入地址信息从对话框读入地址信息m_Urlm_EditResult=;/调用自定义类的成员函数,连接调用自定义类的成员函数,连接Gopher服务器,服务器,m_Url为地址为地址m_EditResult=m_EditResult+m_WinInetClass.ConnectGopher(m_Url);UpdateData(FALSE);6465