CAsyncSocket::SendTo

int SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 );
int SendTo( const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr,int nSockAddrLen, int nFlags = 0 );

返回值:
调用成功时,返回发送的字节数(可能比nBufLen要小)。否则返回SOCKET_ERROR,可以调用GetLastError获得特定的错误代码。此成员函数可用的错误代码有:
·WSANOTINITIALISED在调用本API函数之前,必须已经成功地执行AfxSocketInit。
·WSAENETDOWNWindows Sockets检测到网络系统故障。
·WSAEACCES请求的地址是广播地址,但是相应的位没有被设置。
·WSAEINPROGRESS正在进行一个成块的Windows Sockets操作。
·WSAEFAULT参数lpBuf或lpSockAddr无效,不是用户地址空间中的有效地址。或者因为参数lpSockAddr太小(小于结构SOCKADDR的大小)。
·WSAEINVAL主机名无效。
·WSAENETRESET连接需要重置,因为Windows Sockets的实现删除了连接。
·WSAENOBUFSWindows Sockets的实现发现了缓冲的死锁。
·WSAENOTCONN套接字没有连接上(仅用于SOCK_STREAM型的套接字)。
·WSAENOTSOCK描述符不是一个套接字。
·WSAEOPNOTSUPP设置了MSG_OOB,但套接字不是SOCK_STREAM类型的。
·WSAESHUTDOWN套接字已经关闭,调用ShutDown(参数nHow被设为1或2)后,不能在套接字上调用SendTo。
·WSAEWOULDBLOCK套接字被标记为非成块的,但请求发送操作将产生成块。
·WSAEMSGSIZE套接字类型为SOCK_DGRAM,数据报大于Windows Sockets实现支持的最大值。
·WSAECONNABORTED由于超时或其它故障使虚电路异常终止。
·WSAECONNRESET远端重置了虚电路。
·WSAEADDRNOTAVAIL本地机不能存取指定的地址。
·WSAEAFNOSUPPORT这个套接字中不能使用指定地址族中的地址。
·WSAEDESTADDRREQ需要有目标地址。
·WSAENETUNREACH此时网络不能被主机访问。

参数:
lpBuf存放待发送数据的缓冲。
nBufLenlpBuf缓冲中待发送数据的字节数。
nHostPort标志套接字的端口。
lpszHostAddress连接到的套接字的网络地址:象ftp.microsoft.com这样的机器名或者句点分隔的IP地址“128.56.22.8”。
nFlags设置函数调用的方式。函数的语义由套接字选项和nFlags共同决定。nFlags由下面的任一个值构成,也可用C++的OR操作符组合使用:
·MSG_DONTROUTE表明数据不受路由的限制,WindowsSockets提供者(兼容Windows Sockets的软件厂商)可以忽略这个标志。请参阅联机文档“Win32 SDK”的“Windows套接字编程注意事项”中关于SO_DONTROUTE选项的讨论。
·MSG_OOB处理带外数据(仅用于SOCK_STREAM类型的套接字)

lpScokAddr指向SOCKADDR结构的指针,结构中包括了目标套接字的地址。
nSockAddrlenlpSockAddr中地址的字节数。

说明:
本函数用于向一个指定的地址发送数据。它可以在流套接字或数据报套接字上写出数据。对数据报型的套接字,注意不要使数据包超出网络支持的最大IP包的大小。这个值可以由AfxsocketInit返回的WSADATA结构中的成员iMaxUdpDg给出。待发送数据如果超出这个长度,将不会被发送,并且错误代码被设置为WSAEMSGSIZE,可以调用GetLastError得到这个错误代码。
注意,对于数据报套接字,SendTo的成功结束并不意味着数据一定成功地发送到了目的地。
由参数lpSockAddr指明具体目标套接字发送数据报时,SendTo仅用于SOCK_DGRAM型的套接字。
发送广播数据(仅用于SOCK_DGRAM型的套接字),参数lpSockAddr指明的地址应该由一个特殊的IP地址:INADDR_BROADCAST(它在Windows Sockets的头文件WINSOCK.H中定义)和相应的端口号构成。此外,如果参数lpszHostAddress为NULL,则套接字也用于广播发送。数据报的数据部分不能超过512字节,因此广播的数据报最好不要超过这个数字,以避免数据的分割。

请参阅:
CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::ReceiveFrom, CAsyncSocket::Send