📄 file_receive.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
#define MAX_BUF_SIZE 1024
#define SERVPORT 6666
struct context
{
int flag; /*
1: file name ,
2: file data ,
3: file end ,
other: error
*/
int counts;
char data[MAX_BUF_SIZE];
};
int main( void )
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes,receivepkgs=0;
int sockfd,client_fd,receivefilefd,writebytes;
char buf[MAX_BUF_SIZE];
struct context receivecontext;
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero((char *)&(server_sockaddr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
printf("bind success!\n");
if(listen(sockfd,10)==-1)
{
perror("listen");
exit(1);
}
printf("listening....\n");
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1)
{
perror("accept");
close(sockfd);
exit(1);
}
while(1)
{
if((recvbytes=recv(client_fd,&receivecontext,sizeof(struct context),0))==-1)
{
perror("recv");
close(sockfd);
exit(1);
}
printf("flag==%d, ",receivecontext.flag);
switch(receivecontext.flag)
{
case 1:
{
if((receivefilefd = open(receivecontext.data,O_CREAT|O_RDWR,0666)) < 0)
{
perror("open!!!..\n");
close(sockfd);
exit(1);
}
printf("open file %s,fd: %d......\n", receivecontext.data,receivefilefd );
break;
}
case 2:
{
if((writebytes = write(receivefilefd,receivecontext.data,receivecontext.counts)) < 0)
{
perror("write!!!..\n");
close(sockfd);
exit(1);
}
else
printf("write file fd: %d, packages: %d , %d chars........\n ",receivefilefd,++receivepkgs,writebytes);
break;
}
case 3:
{
if((writebytes = write(receivefilefd,'\0',1)) < 0)
{
perror("write!!!..\n");
exit(1);
}
close(receivefilefd);
close(sockfd);
printf("reveive is end !!!\n");
return 0;
break;
}
default:
{
perror("error");
close(sockfd);
exit(-1);
break;
}
}
}
close(sockfd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -