我在2个不同进程之间使用AF_UNIX,SOCK_STREAM套接字进行IPC。客户端正在通过服务器提取和处理的套接字发送数据。使用以下命令,客户端写入套接字的每个数据块的大小大约为13 KB:

Send Command in client : send(s, txPackDisp, sizeof(float)*PACKET_LENGTH, 0);

但是,当我使用以下命令在服务器上接收数据时:
Receive command in server : recv(s, bfoData, PACKET_LENGTH*sizeof(float),0);

每次收到的数据只是我发送的数据的一部分(最后会有很多零,事实并非如此)。

所以我的问题是:
  • 我可以通过AF_UNIX,SOCK_STREAM套接字发送的数据大小的最大限制是否有限制(根据我的阅读,我认为没有)
  • 传输时套接字是否将数据分解成较小的块?如果是这种情况,我需要像现在这样单独地或作为单个块接收较小的块。
  • 在这里使用AF_UNIX,SOCK_DGRAM套接字会更好吗?

  • P.S:服务器和客户端主要功能的源代码可以在以下问题中看到:IPC using Unix Domain Sockets

    最佳答案

    Q1)Is there a limit on the maximum limit on the size of data that I can send over the AF_UNIX,SOCK_STREAM socket ( from what I have read , I don't think there is )
    你是对的。 SOCK_STREAM没有实际限制。

    Q2 a)Does the socket break up the data into smaller blocks when transferring
    你是对的。流由发送器和接收器协商成可管理大小的数据包。

    Q2 b)and if thats the case do I need to receive the smaller blocks individually or as single block like I am doing right now.
    你什么都不需要做流在传输时在另一端重新组装。

    Q3)Will it be better to use AF_UNIX,SOCK_DGRAM socket here.
    不需要。除非您需要全面了解数据包大小协商,检查丢失的数据包并重新发送它们,确保正确管理乱序接收的数据包等。

    10-01 22:37
    查看更多