23,127
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#define SRV_HOST "127.0.0.1"
#define SRV_PORT 13000
#define FILE_PATH "./sendfile.txt"
int main()
{
int clifd;
if( (clifd=socket(AF_INET,SOCK_STREAM,0))==-1 )
{
perror("socket");
return 1;
}
struct sockaddr_in srvAddr;
srvAddr.sin_family=AF_INET;
srvAddr.sin_port=htons(SRV_PORT);
srvAddr.sin_addr.s_addr=inet_addr(SRV_HOST);
if( connect(clifd,(struct sockaddr*)&srvAddr,sizeof(struct sockaddr_in))==-1 )
{
perror("connect");
return 2;
}
int filefd=open(FILE_PATH,O_RDONLY);
if(filefd==-1)
{
perror("open");
return 3;
}
struct stat buf;
int size;
if(fstat(filefd,&buf)==-1)
{
perror("fstat");
return 4;
}
size=buf.st_size;
int on=1;
if(ioctl(clifd,FIONBIO,&on)==-1)
{
perror("ioctl");
return 5;
}
int ret;
while(true)
{
ret=sendfile(clifd,filefd,NULL,5000);
if(ret==-1)
{
perror("sendfile");
if(errno!=EAGAIN)
{
return 6;
}
}
else if(ret==0)
{
printf("sendfile done.......\n");
break;
}
else
{
printf("send %d\n",ret);
//size-=ret;
}
}
close(clifd);
close(filefd);
return 0;
}
#include "net.h"
#define STORE_PATH "./store.txt"
int main()
{
int srvfd;
if( (srvfd=socket(AF_INET,SOCK_STREAM,0))==-1 )
{
perror("socket");
return 1;
}
struct sockaddr_in srvAddr;
srvAddr.sin_family=AF_INET;
srvAddr.sin_port=htons(SRV_PORT);
srvAddr.sin_addr.s_addr=inet_addr(SRV_HOST);
int on=1;
if(setsockopt(srvfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(int))==-1)
{
perror("setsockopt");
return 2;
}
if( bind(srvfd,(struct sockaddr*)&srvAddr,sizeof(struct sockaddr_in))==-1 )
{
perror("bind");
return 3;
}
if( listen(srvfd,5)==-1 )
{
perror("listen");
return 3;
}
char buffer[1000];
int ret,fd;
if( (fd=open(STORE_PATH,O_CREAT|O_TRUNC|O_WRONLY,S_IRUSR|S_IWUSR))==-1 )
{
perror("open");
return 4;
}
struct sockaddr_in cliAddr;
socklen_t len=sizeof(cliAddr);
int clifd=accept(srvfd,(struct sockaddr*)&cliAddr,&len);
if(clifd==-1)
{
perror("accept");
return 5;
}
while(true)
{
ret=recv(clifd,buffer,1000,0);
if(ret==-1)
{
perror("recv");
if(errno!=EAGAIN)
{
return 6;
}
}
else if(ret>0)
{
if(write(fd,buffer,ret)!=ret)
{
perror("write");
return 7;
}
}
else
{
break;
}
}
close(fd);
close(clifd);
close(srvfd);
return 0;
}