linux udp文件传输,linux下udp大文件传输

本文介绍了一个使用C语言实现的UDP文件接收程序。该程序通过socket编程创建UDP套接字并绑定到指定端口,然后在一个无限循环中等待接收来自客户端的数据包。接收到的数据被写入到指定文件中,直到接收到结束信号。文章详细展示了如何处理UDP数据报的读取和写入操作,并提供了完整的源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;

#include;

#define SERV_PORT 2500

#define MAX_SIZE 1024*40

void recvUDP(char name[20],int sockfd)

{

int ret,fd;

mode_t fdmode = (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

char mesg[MAX_SIZE];

fd_set rdset;

struct timeval tv;

int rlen,wlen;

int i;

fd = open(name,O_RDWR|O_CREAT|O_APPEND,fdmode);

if(fd == -1)

{

printf("open file %s error:%n",name,strerror(errno));

exit(-1);

}

for(i=0;;i++)

{

tv.tv_sec = 1;

tv.tv_usec = 0;

FD_ZERO(&rdset);

FD_SET(sockfd,&rdset);

ret = select(sockfd+1,&rdset,NULL,NULL,&tv);

if(ret == -1)

{

printf("select error %s\n",strerror(errno));

exit(-1);

}

else if(ret==0)

{

printf("select timeout,continue circle\n");

continue;

}

if(FD_ISSET(sockfd,&rdset))

{

memset(mesg,0,MAX_SIZE);

rlen = read(sockfd,mesg,MAX_SIZE);

if(rlen <=0 )

{

printf("read error %s\n",strerror(errno));

exit(-1);

}

if(!strcmp(mesg,"end"))

{

printf("recv end.\n");

break;

}

wlen = write(fd,mesg,rlen);

if(wlen != rlen )

{

printf("write error %s\n",strerror(errno));

exit(-1);

}

}

printf("The %d times write\n",i);

}

close(fd);

}

int main(int argc, char *argv[])

{

int sockfd;

int r;

struct sockaddr_in servaddr;

sockfd = socket(AF_INET,SOCK_DGRAM,0); /*create a socket*/

/*init servaddr*/

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

/*bind address and port to socket*/

if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) == -1)

{

perror("bind error");

exit(-1);

}

r = fcntl(sockfd, F_GETFL, 0);

fcntl(sockfd, F_SETFL, r & ~O_NONBLOCK);

recvUDP(argv[1],sockfd);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值