Created
March 23, 2015 03:18
-
-
Save pineoc/d5295c74f4020f1627eb to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/* | |
pineoc, 2015-03-23 | |
week 4 network programming | |
file server & client | |
client code | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <arpa/inet.h> | |
#include <sys/socket.h> | |
#define BUF_SIZE 30 | |
void error_handling(char* msg); | |
int main(int argc,char* argv[]) | |
{ | |
int sd;//socket id | |
FILE* fp;//file pointer | |
char buf[BUF_SIZE]; | |
int read_cnt; | |
struct sockaddr_in serv_addr; | |
if(argc!=3) | |
{ | |
printf("Usage : %s <IP> <port> \n",argv[0]); | |
exit(1); | |
} | |
fp=fopen("receive.dat","wb"); | |
sd = socket(PF_INET,SOCK_STREAM,0); | |
if(sd==-1) | |
error_handling("socket() err"); | |
memset(&serv_addr,0,sizeof(serv_addr)); | |
serv_addr.sin_family = AF_INET; | |
serv_addr.sin_addr.s_addr = inet_addr(argv[1]); | |
serv_addr.sin_port = htons(atoi(argv[2])); | |
connect(sd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); | |
while((read_cnt=read(sd,buf,BUF_SIZE))!=0) | |
fwrite((void*)buf,1,read_cnt,fp); | |
puts("receive file data"); | |
write(sd,"T u",4); | |
fclose(fp); | |
close(sd); | |
return 0; | |
} | |
void error_handling(char* msg) | |
{ | |
fputs(msg,stderr); | |
fputc('\n',stderr); | |
exit(1); | |
} |
This file contains hidden or 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
/* | |
pineoc, 2015-03-23 | |
week 4 network programming | |
file server & client | |
server code | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include <arpa/inet.h> | |
#include <sys/socket.h> | |
#define BUF_SIZE 30 | |
void error_handling(char* msg); | |
int main(int argc,char* argv[]) | |
{ | |
int serv_sd,clnt_sd; | |
FILE* fp; | |
char buf[BUF_SIZE]; | |
int read_cnt; | |
struct sockaddr_in serv_addr,clnt_addr; | |
socklen_t clnt_addr_size; | |
if(argc!=2) | |
{ | |
printf("Usage : %s <port> \n",argv[0]); | |
exit(1); | |
} | |
fp=fopen("file_server.c","rb"); | |
serv_sd = socket(PF_INET,SOCK_STREAM,0); | |
memset(&serv_addr,0,sizeof(serv_addr)); | |
serv_addr.sin_family=AF_INET; | |
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); | |
serv_addr.sin_port=htons(atoi(argv[1])); | |
bind(serv_sd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); | |
listen(serv_sd,5); | |
clnt_addr_size=sizeof(clnt_addr); | |
clnt_sd=accept(serv_sd,(struct sockaddr*)&clnt_addr,&-clnt_addr_size); | |
while(1) | |
{ | |
read_cnt=fread((void*)buf,1,BUF_SIZE,fp); | |
if(read_cnt<BUF_SIZE) | |
{ | |
write(clnt_sd,buf,read_cnt); | |
break; | |
} | |
write(clnt_sd,buf,BUF_SIZE); | |
} | |
shutdown(clnt_sd,SHUT_WR); | |
read(clnt_sd,buf,BUF_SIZE); | |
printf("Message from client : %s \n",buf); | |
fclose(fp); | |
close(clnt_sd); | |
close(serv_sd); | |
return 0; | |
} | |
void error_handling(char* msg) | |
{ | |
fputs(msg,stderr); | |
fputc('\n',stderr); | |
exit(1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment