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

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

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

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

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

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

Vc++编程技术第九讲网络编程(WinsockAPI)1.加载Winsock 每个Winsock应用都必须加载WinsockDLL的相应版本。如果调用Winsock之前,没有加载Winsock库,这个函数就会返回一个SOCKET_ERROR,错误信息是WSANOTINITIALISED。加载Winsock库是通过调用WSAStartup函数实现的。这个函数的定义如下: intWSAStartup( WORDwVersionRequested, LPWSADATAlpWSAData ); wVersionRequested参数用于指定准备加载的Winsock库的版本。高位字节指定所需要的Winsock库的副版本,而低位字节则是主版本。然后,可用宏MAKEWORD(X,Y)(其中,x是高位字节,y是低位字节)方便地获得wVersionRequested的正确值。lpWSAData参数是指向LPWSADATA结构的指针,WSAStartup用其加载的库版本有关的信息填在这个结构中。 面向连接的协议其中,参数s是一个限定套接字,它处在监听模式。第二个参数应该是一个有效的SOCKADDR_IN结构的地址,而addrlen应该是SOCKADDR_IN结构的长度。对于属于另一种协议的套接字,应当用与那种协议对应的SOCKADDR结构来替换SOCKADDR_IN。 intsend(SOCKETs,constcharFAR*buf,intlen,intflags); SOCKET参数是已建立连接的套接字,将在这个套接字上发送数据。第二个参数buf,则是字符缓冲区,区内包含即将发送的数据。第三个参数len,指定即将发送的缓冲区内的字符数。最后,flags可为0、MSG_DONTROUTE或MSG_OOB。 intWSASend(SOCKETs,LPWSABUFlpBuffers,DWORDdwBufferCount,LPDWORDlpNumberOfBytesSent,DWORDdwFlags,LPWSAOVERLAPPEDlpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionROUTINE); 这个套接字是一个连接会话的有效句柄。第二个参数是指向一个或多个WSABUF结构的指针。它既可是一个独立的结构,又可以是一组结构。第三个参数指明准备投递的WSABUF结构数。记住,每个WSABUF结构本身就是一个字符缓冲和缓冲长度。 无连接协议发送端 要在一个无连接的套接字上发送数据,有两种选择。第一种,也是最简单的一种,便是建立一个套接字,然后调用sendto或WSASendTo。我们先来讲解sendto函数,它的定义是这样的: intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen); 除了buf是发送数据的缓冲,len指明发送多少字节外,其余参数和recvfrom的参数一样。另外,to参数是一个指向SOCKADDR结构的指针,带有接收数据的那个工作站的目标地址。 例子