预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

三、基本套接口函数C/S结构是网络应用系统的常见模型,Sockets接口可以很好地满足客户端和服务器之间进行通信的需求。Sockets接口的工作原理以开发一个基于TCP的服务器程序为例,其流程是:首先初始化Winsock,创建一个Socket,绑定并监听本地的某个特定端口,accept接受客户端的连接,在accept操作返回的Socket上进行数据通信,关闭Socket,最后结束Winsock的使用。下图分别介绍,面向连接套接口的工作原理和无连接套接口的工作原理。WSAStarup()WSAStarup()(1)WSAStarup函数负责初始化动态链接库Ws2_32.dll。函数定义如下:intWSAStarup(WORDwVersionRequestLPWSADATAlpWSAData)WORDwVersionRequest指定了应用程序需要使用的Winsock规范的最高版本,可直接赋值常量WINSOCK_VERSIONLPWSADATAlpWSAData指向一个WSAData数据结构的指针,该结构用于返回本机的Winsock系统实现的信息。返回值:成功则返回0;否则返回错误码注意:该函数完成初始化功能,同时也可用于应用程序与系统之间进行版本协商。如:WSADatawsaData;WSAStartup(WINSOCK_VERSION,&wsaData);……WSACleanup()(2)socket函数功能:创建套接口。定义:SOCKETsocket(intaf,inttype,intprotocol)Af:指定协议族,AF_INETType:常用有三种类型:SOCK_STREAM,SOCK_DGRAM,SOCK_RAWProtocol:指定所用协议,通常用0值,除原始套接口(ICMP协议值为IPPROTO_ICMP,INET的值为IPPROTO_RAW)。返回值:如果没有错误发生,函数返回一个16位套接口描述符;否则返回常量值INVALID_SOCKET,可调用WSAGetLastError来查出系统的错误代码。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。(3)bind()定义:intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen)功能:将一个本地的传输层地址与已创建的套接口联系起来。Name:指向供套接口使用本地地址的通用地址指针。Namelen:name参数的长度。返回值:无错误返回0;否则返回SOCKET_ERROR.Bind()系统调用主要用处:A)服务员向系统注册它的众所周知的地址,它告诉系统:“这是我的地址(服务),所有以这个地址接收的报文都交给我,由我来服务。”面向连接和无连接的服务员在接受顾客的请求之前都必须做这一步。B)顾客可为它自己注册一个特定的地址,以便通信的对方(服务员)可以用这个有效的地址送回响应,这就像在信封上要写明回信地址的道理一样.例:创建一个流Socket,并绑定至本地IP202.102.115.12的4359端口。(4)、sendtosend,sendto,recv,recvfrom函数调用的参数:flags(5)、recvfrom例:发送UDP报文elseprintf("Sendout%dbytes!\n",res);closesocket(sock);WSACleanup();return0;}voidHandleError(char*func){interrCode=WSAGetLastError();charinfo[65]={0};_snprintf(info,64,"%s:%d\n",func,errCode);printf(info);}数据报的接收端程序:memset(&addr,0,sizeof(addr));charbuf[120]={0};intret=recvfrom(……);if(ret==SOCKET_ERROR){printf("recv:%d\n",WSAGetLastError());}elseprintf("recv%dbytefrom%s!\n",ret,inet_ntoa(……);closesocket(sock);WSACleanup();return0;}(6)Listen功能:该函数仅被TCP服务端使用,负责通知协议内核用户进程准备接收套接口上的连接请求,它同时也指定了在该套接口上可以排队等待的连接数的门限值.定义:intlisten(SOCKETs,intbacklog)返回值:没有错误返回0,否