📄 fileclient.c
字号:
/*
Very simple file transferring client.
Copyright (C) 2004-2006, Li Suke, School of Software and Microelectronics,
Peking University
This is free software; you can redistribute it and/or
modify it freely.
This software is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "rw.h"
int main(int argc, char *argv[]){
int sockfd;
int conn_ret;
struct sockaddr_in servaddr;
char cmd_buf[MAX_LEN];
char recvbuf[MAX_LEN];
int error_flag;
int len = MAX_LEN;
int file_fd;
int dot_number;
int total_len = 0;
if(argc != 5){
printf("Usage: fileclient <address> <port> <src file> <des file>\n");
return 0;
}
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
perror("sock");
exit(1);
}
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");
}
file_fd = open(argv[4],O_CREAT | O_WRONLY);
if(file_fd == -1){
perror("open");
exit(1);
}
len = strlen(argv[3])+3;
snprintf(cmd_buf,len,"%s\r\n",argv[3]);
if((error_flag = writeall(sockfd,cmd_buf,&len))==-1){
exit(1);
}
len = MAX_LEN;
printf("\nfile is transferring:\n");
while ((error_flag = readall(sockfd,recvbuf,&len))==0){
if(len == 0){
printf("\nClient has received file!\n");
break;
}
printf(".");
printf("read length is %d\n",len);
dot_number++;
if((dot_number % DOT_PERIOD) ==0){
printf("\n");
dot_number = 0;
}
total_len+=len;
if(writeall(file_fd,recvbuf,&len) == -1){
printf("\nclient has some error when receive the file!\n");
break;
}
len = MAX_LEN;
}
printf("\nRecevied %d bytes\n",total_len);
close(file_fd);
close(sockfd);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -