Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <stdio.h>
- # include <stdlib.h>
- # include <unistd.h>
- # include <string.h>
- # include <errno.h>
- # include <sys/socket.h>
- # include <sys/types.h>
- # include <netinet/in.h>
- #include <dirent.h>
- #include <netdb.h>
- #include <fcntl.h>
- # define PORT 12345
- # define BUFSIZE 128
- int main(int argc, char** argv){
- int sd=socket(AF_INET,SOCK_STREAM,0);
- long val =1;
- if(setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(long))==-1){
- perror("setsockopt");
- exit(1);
- }
- int client_sd;
- struct sockaddr_in server_addr;
- struct sockaddr_in client_addr;
- memset(&server_addr,0,sizeof(server_addr));
- server_addr.sin_family=AF_INET;
- server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
- int x = atoi(argv[1]);
- server_addr.sin_port=htons(x);
- if(bind(sd,(struct sockaddr *) &server_addr,sizeof(server_addr))<0){
- printf("bind error: %s (Errno:%d)\n",strerror(errno),errno);
- exit(0);
- }
- if(listen(sd,3)<0){
- printf("listen error: %s (Errno:%d)\n",strerror(errno),errno);
- exit(0);
- }
- int addr_len=sizeof(client_addr);
- if((client_sd=accept(sd,(struct sockaddr *) &client_addr,&addr_len))<0){
- printf("accept erro: %s (Errno:%d)\n",strerror(errno),errno);
- exit(0);
- }
- while(1){
- char buff[100];
- int len;
- if((len=recv(client_sd,buff,sizeof(buff),0))<0){
- printf("receive error: %s (Errno:%d)\n", strerror(errno),errno);
- exit(0);
- }
- buff[len]='\0';
- printf("RECEIVED INFO: ");
- if(strlen(buff)!=0)printf("%s\n",buff);
- if(strcmp("list",buff)==0){
- struct dirent *de;
- DIR *dr = opendir(".");
- if (dr == NULL) // opendir returns NULL if couldn't open directory
- {
- printf("Could not open current directory" );
- return 0;
- }
- while ((de = readdir(dr)) != NULL) {
- if((len=send(client_sd,de->d_name,strlen(de->d_name),0))<0){
- printf("Error: %s (Errno:%d)\n",strerror(errno),errno);
- exit(0);
- }else{
- send(client_sd,"\n",strlen("\n"),0);
- printf("%s\n", de->d_name);
- }
- }
- closedir(dr);
- break;
- }
- if(strcmp(buff, "put") == 0){
- char fname[50];
- char buf[100];
- int n;
- if((len=recv(client_sd,fname,sizeof(fname),0))<0){
- printf("receive error: %s (Errno:%d)\n", strerror(errno),errno);
- exit(0);
- }
- int fd;
- printf("File name is :%s\n", fname);
- fd=open(fname,O_WRONLY|O_CREAT,S_IRWXU);
- while ( (n = read(client_sd, buf, strlen(buf)-1)) > 0)
- {
- buf[n] = '\0';
- write(fd,buf,n);
- if( n < BUFSIZE-2)
- break;
- }
- printf("file receiving completed \n");
- close(client_sd);
- close(fd);
- }
- }
- close(sd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement