Created
March 5, 2020 13:52
-
-
Save lau-jay/3c2d0fa8cdaffde6e3ea667be755babc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <arpa/inet.h> | |
#include <sys/stat.h> | |
#include <sys/socket.h> | |
#include <fcntl.h> | |
#define BUF_SIZE 1024 | |
void error_handling(char *message); | |
int main(int argc, char * argv[]) | |
{ | |
int sock; | |
char file_name[32]; | |
char message[BUF_SIZE]; | |
mode_t filePerms; | |
int inputFd, outputFd, openFlags, read_len; | |
struct sockaddr_in serv_adr; | |
if(argc!=3){ | |
printf("Usage: %s <IP> <port>\n", argv[0]); | |
exit(1); | |
} | |
sock = socket(PF_INET, SOCK_STREAM, 0); | |
if(sock==-1) | |
error_handling("socket() error"); | |
memset(&serv_adr, 0, sizeof(serv_adr)); | |
serv_adr.sin_family=AF_INET; | |
serv_adr.sin_addr.s_addr=inet_addr(argv[1]); | |
serv_adr.sin_port=htons(atoi(argv[2])); | |
if(connect(sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1) | |
error_handling("connect() error!"); | |
else | |
puts("Connected......"); | |
fputs("Input file name: ", stdout); | |
// 获取文件名 | |
// 传送给服务器 | |
fgets(file_name, 32, stdin); | |
printf("require file %s\n", file_name); | |
if(write(sock, file_name, strlen(file_name))==-1) | |
error_handling("send file name error"); | |
for(int i=0;i<3000;i++) | |
{ | |
} | |
openFlags = O_CREAT|O_WRONLY|O_TRUNC; | |
filePerms = S_IRUSR| S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH; // rw-rw-rw- | |
outputFd = open(file_name, openFlags, filePerms); | |
printf("require file %s\n", file_name); | |
while((read_len=read(sock, &message, BUF_SIZE)) > 0) | |
{ | |
if(write(outputFd, message, read_len) != read_len) | |
error_handling("couldn't write whole buffer"); | |
} | |
if(read_len == -1) | |
error_handling("read() error"); | |
close(sock); | |
close(outputFd); | |
return 0; | |
} | |
void error_handling(char *message) | |
{ | |
fputs(message, stderr); | |
fputc('\n', stderr); | |
exit(1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment