请教一个UDP组播的问题

daydreary 2014-02-12 04:44:37
用WinSend发送组播,发送的文件是一个TS流,从物理机windows往虚拟机Linux系统上发。接收端程序是我写的,每次发送都是发出85866KB,但是接收的文件就要比这个小几百K。这样播放时候丢帧就会卡顿几下。附上代码,请高手指点下,谢谢。


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <sys/time.h>

#define MAX_LENGTH 5 * 1024 * 1024
#define PORT 8000
#define GROUP "239.1.1.1"

int main()
{
struct sockaddr_in server, client;
struct ip_mreq mreq;
unsigned char buf[MAX_LENGTH];
int fd, sinSize, recvlength;
fd_set readfds;
int ret;
struct timeval timeout = {3, 0};

memset(&server, 0, sizeof(struct sockaddr_in));
memset(&client, 0, sizeof(struct sockaddr_in));
memset(&mreq, 0, sizeof(struct ip_mreq));

server.sin_family = AF_INET;
server.sin_port = htons(PORT);
if (inet_aton(GROUP, &server.sin_addr) < 0) {
perror("inet_aton");
return -1;
}

if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
return -1;
}

if (bind(fd, (struct sockaddr *) &server, sizeof(server)) < 0) {
perror("bind");
return -1;
}

if (inet_aton(GROUP, &mreq.imr_multiaddr) < 0) {
perror("inet_aton mreq.imr_multiaddr");
return -1;
}
inet_aton("192.168.180.170", &(mreq.imr_interface));
if (setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) {
perror("setsockopt");
return -1;
}

sinSize = sizeof(client);
FILE *fp;
fp = fopen("./recv1.2.ts", "ab+");
while (1) {
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
if ((ret = select(fd + 1, &readfds, NULL, NULL, &timeout)) < 0)
break;
else if(ret == 0)
continue;
else {
if (FD_ISSET(fd, &readfds) == 0)
continue;
recvlength = recvfrom(fd, buf, MAX_LENGTH, 0, (struct sockaddr *) &client, &sinSize);
if (recvlength < 0) {
perror("receive");
continue;
}
fwrite(buf, sizeof(unsigned char), recvlength, fp);
fflush(fp);
}
}
}
...全文
121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧