c - receive() 链接消息

标签 c sockets network-programming

我有一段代码:

while(1) {
    if(recvfrom(*val, buffer, 1024, MSG_PEEK, NULL, NULL)==-1) {    
        perror("recv");
        exit(1);
    } else printf("recv msgpeek\n");
    if(*(int*)buffer>5) {
        if(recvfrom(*val, buffer, 1024, 0, NULL, NULL)==-1) {   
            perror("recv");
            exit(1);
        } else printf("recv\n");
        if(*(int*)buffer==6) {
                    printf("%d\n", *(int*)(buffer+sizeof(int)+30));
                    printf("%s\n", (char*)buffer+sizeof(int));
                }
   }

这是客户计划的一部分。我正在从服务器向该客户端发送消息,我注意到当客户端收到该消息时,它们就已连接。我正在使用 SOCK_STREAM 类型套接字。有人知道如何避免连接消息吗?

最佳答案

如果我理解正确,您正在从 TCP 套接字读取数据,并期望获得与从另一端“发送”的字节数完全相同的字节数。在这里你的假设是错误的。 TCP 套接字是一个双向流,即它不保留通过它发送的应用程序消息的边界。连接一侧的“写入”可能会导致另一侧的多个“读取”,反之亦然,可以一起接收多个“写入”。最后一个案例就是您所看到的。您有责任跟踪消息边界。

相关问题 - Receiving data in TCP .

关于c - receive() 链接消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986652/

相关文章:

c - 在简单的 gtk 按键事件示例中,GDK_SHIFT_MASK 似乎被忽略了

sockets - Windows Phone 7与具有wifi功能的微 Controller 的连接

Python 套接字错误 - recv() 函数

c++ - 开源和跨平台多人游戏/网络库?

javascript - 如何在服务器发送的 js 文件到达我的浏览器之前对其进行编辑?

networking - 中断用户浏览我的广告页面

c - 使用嵌套结构数组进行结构初始化

c - 在 C 中将矩阵保存到文件(.txt 格式)

c - Windows 中使用 Codeblocks 和 MinGW 的 C 语言 #elif 编译器指令

linux - 如何为 UDP 连接选择以太网端口?