- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
socket文档
第五章 CSocket工程的建立
第一步,建立一个MFC应用程序:
第二步,输入文件名及保存路径后点OK:
第三步,在页面上选择对话框模式,然后点击Next:
第四步,选择Windows Sockets,然后点击Finish,接着点击OK。
注意:在这里我们要建两个这样的MFC应用程序,一个叫Client(即:客户端),一个叫Server(即:服务器端);
第六章 socket的创建和配置
6.1 socket的创建
Socket是网络通信过程中端点的抽象表示。Socket在实现中以句柄的形式被创建,包含了进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
为了创建socket,使用socket函数得到一个socket句柄: socket_handle = socket(protocol_family. Socket_type, protocol);其中:protocol_family指定socket使用的协议,取值PF_INET,表示Internet(TCP/IP)协议族;Socket_type指socket面向连接或者使用数据报;第三个参数表示使用TCP或者UDP协议。
当一个socket被创建时,WinSock将为一个内部结构分配内存,在此结构中保存此socket的信息,到此,socket连接使用的协议已经确定。
下面我们来看一下怎样在程序中创建socket:
首先,在客户端新建一个类继承自CSocket类(本例中将它起名为ClientSock),在服务器端新建两个类继承自CSocket类(本例中将它起名为ClistenSock和CWorkSock),至于为什么要这样定义socket的配置中会讲到,这里就先这样定义;其次,WinSock以DLL的形式提供,在调用任何WinSock API之前,必须调用函数WSAStartup进行初始化,再调用函数WSACleanUp作清理工作。MFC使用函数AfxSocketInit包装了函数WSAStartup,在WinSock应用程序的初始化函数IninInstance中调用AfxSocketInit进行初始化。程序不必调用WSACleanUp。这里注意了,WinSock的初始化,已经在创建工程中的第四步做过了,系统已经自动初始化好了,所以这里我们就不在手动初始化了;最后,就是配置socket。
6.2 socket的配置
对于面向连接的客户,WinSock自动保存本地IP地址和选择协议端口,但是必须使用connect函数配置远地IP地址和远地协议端口:
result = connect(socket_handle, remote_socket_address, address_length)
remote_socket_address是一个指向特定socket结构的指针,该地址结构为socket保存了地址族、协议端口、网络主机地址。
面向连接的服务器则使用bind指定本地信息,使用listen和accept获取远地信息。
使用数据报的客户或者服务器使用bind给socket指定本地信息,在发送或者接收数据时指定远地信息。
bind给socket指定一个本地IP地址和协议端口,如下:
result = bind( socket_hndle, local_socket_address, address_length)
参数类型同connect。
函数listen监听bind指定的端口,如果有远地客户请求连接,使用accept接收请求,创建一个新的socket,并保存信息。
socket_new = accept(socket_listen, socket_address, address_length)
面向连接的socket使用send,recv接收数据;
使用数据报的socket使用sendto发送数据,recvfrom接收数据。
MFC提供了两个类CAsyncSocket和CSocket来封装WinSock API,这给程序员提供了一个更简单的网络编程接口。
CAsyncSocket在较低层次上封装了WinSock API,缺省情况下,使用该类创建的socket是非阻塞的socket,所有操作都会立即返回,如果没有得到结果,返回WSAEWOULDBLOCK,表示是一个阻塞操作。
CSocket建立在CAsyncSocket的基础上,是CAsyncSocket的派生类。也就是缺省情况下使用该类创建的socket是非阻塞的socket,但是CSocket的网络I/O是阻塞的,它在完成任务之后才返回。CSocket的阻塞不是建立在“阻塞”socket的基础上,而是在“非阻塞”socket上实现的阻塞
文档评论(0)