1

我有一个简单的服务器 - 客户端模型。服务器在其中向客户端发送一些加密消息。客户端然后使用消息的前几个字符来决定处理。问题是这些消息一个接一个地被缓冲,因此我丢失了在第一个消息之后缓冲的所有消息。有没有一种简单的方法来防止缓冲或告诉发送函数刷新。

4

1 回答 1

0

您的客户端必须确定应该读取多少字节才能处理。服务器将一个接一个地发送一条消息,但流式套接字允许字节流动,就好像它是一条长消息一样。您的消息需要某种方式让客户知道一个消息何时结束,下一个消息何时开始。

在流式套接字中执行此操作的最简单方法是在消息前面加上消息的长度。所以客户端首先读取长度,然后客户端读取那么多字节。

int send_message (int sock, const void *message, uint32_t len) {
    int r;
    uint32_t mlen = htonl(len);
    r = send(sock, &mlen, 4, 0);
    /* ...error checking... */
    r = send(sock, message, len, 0);
    /* ...error checking... */
    return ok ? len : error;
}

int recv_message (int sock, void *buf, uint32_t size) {
    int r;
    uint32_t mlen;
    r = recv(sock, &mlen, 4, 0);
    /* ...error checking... */
    mlen = ntohl(len);
    /* ...check buf is large enough... */
    r = recv(sock, buf, mlen, 0);
    /* ...error checking... */
    return ok ? mlen : error;
}
于 2012-08-19T15:57:49.573 回答