send函数和recv函数

send函数

send 函数用于将数据发送到已连接的套接字。

int send(
    _In_ SOCKET s,
    _In_ const char* buf,
    _In_ int len,
    _In_ int flags
);
  • s: 要发送数据的套接字。
  • buf: 指向包含要发送数据的缓冲区的指针。
  • len: 缓冲区中要发送的数据的长度,以字节数为单位。
  • flags: 可选的标志,可以设置为 0。

send 函数返回实际发送的字节数。如果发生错误,返回 SOCKET_ERROR,你可以通过调用 WSAGetLastError() 函数获取具体的错误代码。

const char* message = "Hello from server!";
int bytesSent = send(clientSocket, message, strlen(message), 0);

if (bytesSent == SOCKET_ERROR) {
    printf("Send failed with error: %ld\n", WSAGetLastError());
    closesocket(clientSocket);
    closesocket(serverSocket);
    WSACleanup();
    return 1;
} else {
    printf("Sent %d bytes of data.\n", bytesSent);
}

在上述代码中,如果 send 函数调用失败,就会输出错误信息并进行一些清理操作,然后返回一个表示错误的值。

recv函数

recv 函数用于从一个已连接的套接字(socket)接收数据。以下是 recv 函数的基本形式:

int recv(int socket, void *buffer, size_t length, int flags);
  • socket: 套接字描述符,指定要接收数据的套接字。
  • buffer: 存储接收数据的缓冲区的指针。
  • length: 缓冲区的大小,即可以接收的最大字节数。
  • flags: 通常可以设置为 0。

recv 函数返回接收到的字节数,如果发生错误则返回 -1。下面是一些常见的情况:

  • 返回值大于 0:表示成功接收了指定字节数的数据。
  • 返回值等于 0:表示对方已经关闭了连接。
  • 返回值等于 -1:表示发生了错误。可以使用 errno 变量获取详细的错误信息。

例子:

char buffer[1024];
int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0);

if (bytesRead > 0) {
    // 处理接收到的数据
} else if (bytesRead == 0) {
    // 连接已关闭
} else {
    // 处理错误,可以查看 errno 变量获取详细信息
    perror("recv");
}

注意:在实际的应用中,通常需要在循环中调用 recv 函数,直到接收到足够的数据或者发生错误。这是因为 recv 不保证一次就能接收到指定数量的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值