gpt4 book ai didi

c - 使用recv()接收消息 block

转载 作者:行者123 更新时间:2023-11-30 14:32:22 24 4
gpt4 key购买 nike

我正在使用 WebSocket。我创建了一个小型测试客户端,它分割消息,然后逐 block 发送。例如这样的消息:

PROTOCOL HTTP ACTION UPDATE

可以作为

发送
PROTOC

然后作为一个 block

OL HTT

作为另一种方式,与将完整消息作为PROTOCOL HTTP ACTION UPDATE 发送到一个 block 中不同,这也是一种可能性。

所以我接收消息的方式必须反射(reflect)这一点。目前,我不确定当一条消息被分成多个部分并发送时如何使用 recv

这就是我正在尝试的,但我不确定这是否是正确的方法。我应该在接收时始终将缓冲区大小保持为 200 吗?我什么时候应该退出循环?

void recv_all(){
char rec_buffer[200]
while(1) {
ssize_t bytes_rec = recv(socket_fd, rec_buffer, sizeof(rec_buffer),0);

}
}

最佳答案

(流)套接字处理字节流,而不是消息。因此,它们提供了一种在端点之间获取字节流的方法,仅此而已。如果您想要某种“消息”,您需要处理字节流以找到消息边界并将其分解为消息。

通常的方法是使用缓冲区,例如 C FILE 对象或 C++ Streambuf。您安排从套接字读取字节到缓冲区,然后检查缓冲区中是否有完整的消息,通常是通过查找消息终止符/边界标记(例如\r\n 或只是\n)。如果有,则从缓冲区中删除(仅)该消息。

使用 POSIX 在 C 语言中实现这一点非常容易 - 您可以使用 fdopen 打开带有套接字描述符的文件,然后使用 fgets 或 getline 读取消息直至换行符。

关于c - 使用recv()接收消息 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com