新Visual C++应用开发与实践 教学课件 刘乃琦_ VC 第6章 套接字编程.pptVIP

  • 4
  • 0
  • 约1.1万字
  • 约 41页
  • 2016-10-26 发布于广东
  • 举报

新Visual C++应用开发与实践 教学课件 刘乃琦_ VC 第6章 套接字编程.ppt

6.1.1 OSI参考模型 6.1.2 IP地址 6.1.3 地址解析 6.1.4 域名系统 6.1.5 TCP/IP协议 6.1.6 端口 服务器与客户机间的通信过程是服务器中的客户套接字与客户机端 套接字间的通信。它们中的其中之一发送数据(Send),这时另一端触发receive事件,在该事件中就可以接收数据了。 多客户机中的两个客户机要实现通信,如第i个客户机要将数据发送给第j个客户机,过程是:第i个客户机将数据发送给服务器,服务器中的第i个客户套接字接收该数据,然后找到服务器中的第j个客户套接字,通过它将数据发送给第j个客户机,这样第j个客户机就可以接收到由第i个客户机发送的数据了。 面向非连接的通信,通信前不需要客户发送连接请求,服务器接受请求的过程,总是认为通信双方处于工作状态。用sendto,receivefrom实现数据收发。 Windows系统提供的套接字函数通常封装在ws2_32.dll动态链接库中,其头文件winsock2.h提供了套接字函数的原型,库文件ws2_32.lib提供了?ws2_32.dll动态链接库的输出节。在使用套接字函数前,用户需要引用winsock2.h头文件,并链接ws2_32.lib库文件。例如: #include winsock2.h //引用头文件 #pragma comment (lib,ws2_32.lib) //链接库文件 此外,在使用套接字函数前还需要初始化套接字,可以使用WSAStartup函数来实现。例如: WSADATA wsd; //定义WSADATA对象 WSAStartup(MAKEWORD(2,2),wsd); //初始化套接字 6.3.1 套接字函数介绍 下面介绍网络程序开发中经常使用的套接字函数。 1.WSAStartup 该函数用于初始化ws2_32.dll动态链接库。在使用套接字函数之前,一定要初始化ws2_32.dll动态链接库。 语法格式如下: int WSAStartup ( WORD wVersionRequested,LPWSADATA lpWSAData ); wVersionRequested:调用者使用的Windows Socket的版本,高字节记录修订版本,低字节记录主版本。例如,如果Windows Socket的版本为2.1,则高字节记录1,低字节记录2。 lpWSAData:一个WSADATA结构指针,该结构详细记录了Windows套接字的相关信息。 2.socket 该函数用于创建一个套接字。 语法格式如下: SOCKET socket ( int af,int type, int protocol ); af:一个地址家族,通常为AF_INET。 type:套接字类型,如果为SOCK_STREAM,表示创建面向链接的流式套接字;为SOCK_DGRAM,表示创建面向无链接的数据报套接字;为SOCK_RAW,表示创建原始套节字。对于这些值,用户可以在winsock2.h头文件中找到。 potocol:表示套接口所用的协议,如果用户不指定,可以设置为0。 返回值:是创建的套接字句柄。 3.bind 该函数用于将套接字绑定到指定的端口和地址上。 语法格式如下: int bind (SOCKET s,const struct sockaddr FAR* name,int namelen ); s:套接字标识。 name:一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。 namelen:确定name缓冲区的长度。 返回值:如果函数执行成功,返回值为0,否则为SOCKET_ERROR。 4.listen 该函数用于将套接字设置为监听模式。 语法格式如下: int listen ( SOCKET s, int backlog); s:套接字标识。 backlog:等待连接的最大队列长度。例如,如果backlog被设置为2,此时有3个客户端同时发出连接请求,那么前两个客户端连接会放置在等待队列中,第3个客户端会得到错误信息。 注意:对于流式套接字,必须处于监听模式才能接收客户端套接字的连接。 5.accept 该函数用于接受客户端的连接。对于流式套接字,必须处于监听状态,才能接受客户端的连接。 语法格式如下: SOCKET accept ( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen ); s:一个套接字,应处于监听状态。 addr:一个sockaddr_in结构指针,包含一组客户端的端口号、IP地址等信息。 addrlen:用于接收参数a

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档