如何在c套接字中处理字节流数据

how to handle bytestream data in c socket

void *rtp_rec()
{
    memset(rtpbuf, 0, sizeof(rtpbuf));
    unsigned char rtpbuf[2024]="";
    while(1)
    {
        receive = recvfrom(sock1, rtpbuf,sizeof(rtpbuf) ,0,(struct sockaddr*)&serverrtp,(socklen_t*)&sizeof(serverrtp););
        n = sendto(sock2,rtpbuf,strlen(rtpbuf),0,(struct sockaddr *)&sendtoother,sizeof(sendtoother));
    }
    return 0;
}
////////////////////////////////////////////////////////////////////////////
  1. 我在rtpbuf(buffer)中使用套接字(sock1)上的recvfrom()连续(逐字节)接收180字节数据包。

  2. 我想发送相同的180字节的数据包给另一个 使用 sendto().

  3. 的套接字 (sock2)

但是我的 sendto() 函数发送 1 字节数据包,recvfrom() 也逐字节接收数据。

请提出一些逻辑。

您需要检查 recvfrom() 的值以确保没有错误,并确保您收到正确的字节数。此外,您可能希望发送与接收到的字节一样多的字节,而不是使用 strlen(rtpbuf) 以防万一接收到的数据中有空字节。

receive = recvfrom(sock1, rtpbuf,sizeof(rtpbuf) ,0,(struct sockaddr*)&serverrtp,(socklen_t*)&sizeof(serverrtp));
if (receive == -1) {
    perror("recvfrom failed");
} else {
    printf("received %d bytes\n", receive);
    n = sendto(sock2,rtpbuf,receive,0,(struct sockaddr *)&sendtoother,sizeof(sendtoother));
}