WSASend函数的使用方法

这个函数提供的功能是建立在标准的recv函数之上的,下面三点是关键的地方:
1.可以和重叠socket连接来执行重叠接收操作
2.允许指定多哥接收缓冲区,是scatter/gather类型的I/O可用
3.lpflags参数是一个输入输出参数,允许应用程序探测输出状态的MSG_PARTIAL标志位,然而不是所有的协议都支持MSG_PARTIAL标志位。
这个函数用在连接的和无连接的套接字来接收数据,套接字通过参数s来指定。套接字的本地地址必须被知道,对于服务端程序,通常通过bind函数来显式的得到或通过accept、WSAAccept来隐式的得到。客户端段程序并不鼓励显示的帮定。对于客户端应用程序来说,套接字可以隐式的通过WSAConnect、sendto、WSASendTo来绑定到本地地址。
为了连接面向连接的套接字,这个函数限制地址为接收消息被接受的对端。函数仅仅返回来自连接指定的对端地址的消息。其他地址的消息将被丢弃。对于重叠套接字,WSARecv在应用指定的完成指定发生的是,用来将输入数据被放在一个或多个缓冲区中。如果操作没有立即完成,最终的完成状态通过完成程序返回或WSAGetOverlappedResult函数来返回。
如果lpOverlapped和lpCompletionRoutine是NULL,套接字字被作为一个非重叠套接字对待。对于非重叠套接字,阻塞语义与标准的recv函数相同并且lpOverlapped和lpCompletionRoutine被忽略。任何被传输层已经接收并缓存的数据将被拷贝到用户缓冲区。对于阻塞套接字,当前传输层中没有接受并缓存数据,调用将被阻塞直到有数据被接收。WINSOCK对该函数没有定义阻塞益处机制。对于字节流的协议,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WSASend()函数使用时需要使用WSABUF结构体来传递数据。以下是WSASend()函数的一般用法: ```c++ int WSASend( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); ``` 参数说明: 1. s:指定要发送数据的套接字。 2. lpBuffers:指向WSABUF结构体的指针,该结构体包含要发送的数据和数据长度。 3. dwBufferCount:指定lpBuffers指针数组的数量。 4. lpNumberOfBytesSent:返回实际发送的字节数。 5. dwFlags:指定发送标志。常见的标志包括MSG_OOB,MSG_DONTROUTE和MSG_PARTIAL等。 6. lpOverlapped:指向WSAOVERLAPPED结构体的指针,该结构体用于指定异步操作的参数。 7. lpCompletionRoutine:指向LPWSAOVERLAPPED_COMPLETION_ROUTINE类型的回调函数指针,该函数在异步操作完成时被调用。 以下是一个示例代码: ```c++ // 创建套接字 SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); // 准备要发送的数据 char* sendData = "Hello, world!"; int sendLen = strlen(sendData); // 设置WSABUF结构体 WSABUF dataBuf; dataBuf.len = sendLen; dataBuf.buf = sendData; // 发送数据 DWORD sentBytes = 0; WSASend(sock, &dataBuf, 1, &sentBytes, 0, NULL, NULL); // 关闭套接字 closesocket(sock); ``` 注意事项: 1. 可以使用WSASend()函数进行异步操作,通过设置lpOverlapped参数来实现。 2. 在异步操作中,可以指定一个回调函数,该函数在异步操作完成时被调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值