如何在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;
}
////////////////////////////////////////////////////////////////////////////
我在rtpbuf(buffer)
中使用套接字(sock1)上的recvfrom()
连续(逐字节)接收180字节数据包。
我想发送相同的180字节的数据包给另一个
使用 sendto()
.
的套接字 (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));
}
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;
}
////////////////////////////////////////////////////////////////////////////
我在
rtpbuf(buffer)
中使用套接字(sock1)上的recvfrom()
连续(逐字节)接收180字节数据包。我想发送相同的180字节的数据包给另一个 使用
sendto()
. 的套接字 (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));
}