Windows Socket编程2.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三、基本套接口函数 C/S结构是网络应用系统的常见模型,Sockets接口可以很好地满足客户端和服务器之间进行通信的需求。Sockets接口的工作原理以开发一个基于TCP的服务器程序为例,其流程是:首先初始化Winsock,创建一个Socket,绑定并监听本地的某个特定端口,accept接受客户端的连接,在accept操作返回的Socket上进行数据通信,关闭Socket,最后结束Winsock的使用。下图分别介绍,面向连接套接口的工作原理和无连接套接口的工作原理。 (1)WSAStarup函数 负责初始化动态链接库Ws2_32.dll。函数定义如下: int WSAStarup(WORD wVersionRequest LPWSADATA lpWSAData) WORD wVersionRequest 指定了应用程序需要使用的Winsock规范的最高版本,可直接赋值常量WINSOCK_VERSION LPWSADATA lpWSAData 指向一个WSAData数据结构的指针,该结构用于返回本机的Winsock系统实现的信息。 返回值 :成功则返回0;否则返回错误码 注意:该函数完成初始化功能,同时也可用于应用程序与系统之间进行版本协商。 如:WSAData wsaData; WSAStartup(WINSOCK_VERSION,wsaData); …… WSACleanup() (2)socket函数 功能:创建套接口。 定义:   SOCKET socket(int af,int type,int protocol) Af: 指定协议族,AF_INET Type:常用有三种类型:SOCK_STREAM,SOCK_DGRAM,SOCK_RAW Protocol:指定所用协议,通常用0值,除原始套接口(ICMP协议值为IPPROTO_ICMP,INET的值为IPPROTO_RAW)。 返回值:如果没有错误发生,函数返回一个16位套接口描述符;否则返回常量值INVALID_SOCKET,可调用WSAGetLastError来查出系统的错误代码。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。 (3)bind() 定义:int bind (SOCKET s, const struct sockaddr FAR*name, int namelen) 功能:将一个本地的传输层地址与已创建的套接口联系起来。 Name:指向供套接口使用本地地址的通用地址指针。 Namelen:name参数的长度。 返回值:无错误返回0;否则返回 SOCKET_ERROR. Bind()系统调用主要用处: A)?服务员向系统注册它的众所周知的地址,它告诉系统:“这是我的地址(服务),所有以这个地址接收的报文都交给我,由我来服务。”面向连接和无连接的服务员在接受顾客的请求之前都必须做这一步。 B)???顾客可为它自己注册一个特定的地址,以便通信的对方(服务员)可以用这个有效的地址送回响应,这就像在信封上要写明回信地址的道理一样. 例:创建一个流Socket,并绑定至本地IP 202.102.115.12的4359端口。 (4)、sendto 用于UDP协议中发送信息 int sendto(SOCKET s, const char FAR *buf, int len, int flags, const struct sockaddr *to, int tolen); Buf:指向容纳发送报文的缓冲区的指针 Len:缓冲区的大小 Flags:发送标志 To:指明发送数据的目的地 tolen :地址长度 函数返回已发送的字节数,返回-1表示出错 sendto缺省是阻塞函数,直到发送完毕或出错 注意:如果函数返回值与参数len不相等,则剩余的未发送信息需要再次发送 send, sendto, recv, recvfrom 函数调用的参数:flags Flags一般情况下设置为0。但可以选择下列设置 MSG_DONTROUTE 对send, sendto有效 表示不使用路由(一般不使用) MSG_PEEK 对recv, recvfrom有效 表示读出网络数据后不清除已读的数据 MSG_OOB 对发送接收都有效 表示读/写带外数据(out-of-band data) (5)、recvfrom 用于UDP协议中接收信息 int recvfrom(SOCKET s,char FAR *buf,int len, int flags,struct sockaddr *

文档评论(0)

PPT精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档