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

时间:2015-07-14 11:34:21

标签: c sockets udp

@media (max-width: 980px) {
    first-body:hover{
       height:400px; 
       background-size:800px;
      -webkit-transform: scale(1,1);
      -moz-transform:scale(1,1);
      opacity:.9;
      -webkit-opacity: .9;
      -moz-opacity: .9;
      transition: all .3s ease-in-out;
    }
}
  1. 我在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; } //////////////////////////////////////////////////////////////////////////// 上使用套接字(sock1)上的rtpbuf(buffer)连续(逐字节)接收180字节数据包。

  2. 我希望将180字节的相同数据包发送到另一个 socket(sock2)使用recvfrom()

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

    请提出一些逻辑。

1 个答案:

答案 0 :(得分:1)

您需要检查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));
}