fileclient.c

来自「linux 的client大文件传输 自己做得」· C语言 代码 · 共 60 行

C
60
字号
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define MAXLEN 100
int main(int argc,char *argv[])
{
    int sockfd;    int n;
    int conn_ret;
	int localfile;
	long int counter=0;
	char buffer[MAXLEN];
	FILE *fp;
    struct sockaddr_in servaddr;
    if (argc != 5)
    {
        printf("Usage: fileclient <address> <port> <file_request> <file_store>\n");
    return 0;
}

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
    perror("sock");
    //exit(0);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(atoi(argv[2]));
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
conn_ret=connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(conn_ret==-1)
{
    perror("connect");
}
if((localfile=creat(argv[4],0666))==-1)
{
	perror("create");
}
write(sockfd,argv[3],strlen(argv[3]));
printf("File is transferring....");
if((fp=fopen(argv[4],"w"))==NULL)
{
	fprintf(stdout,"Can't open \"%s\" file.\n",argv[4]);
	//exit(0);
}
while(n=read(sockfd,buffer,MAXLEN))
{
	counter+=n;
	fputs(buffer,fp);
}
printf("Client has received file!");
printf("Received %ld bytes",counter);
fclose(fp);
close(sockfd);
return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?