Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <unistd.h>
  4. # include <string.h>
  5. # include <errno.h>
  6. # include <sys/socket.h>
  7. # include <sys/types.h>
  8. # include <netinet/in.h>
  9. #include <dirent.h>
  10. #include <netdb.h>
  11. #include <fcntl.h>
  12.  
  13.  
  14. # define PORT 12345
  15. # define BUFSIZE 128
  16.  
  17.  
  18. int main(int argc, char** argv){
  19.  
  20.  
  21. int sd=socket(AF_INET,SOCK_STREAM,0);
  22. long val =1;
  23. if(setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(long))==-1){
  24. perror("setsockopt");
  25. exit(1);
  26. }
  27. int client_sd;
  28. struct sockaddr_in server_addr;
  29. struct sockaddr_in client_addr;
  30. memset(&server_addr,0,sizeof(server_addr));
  31. server_addr.sin_family=AF_INET;
  32. server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
  33. int x = atoi(argv[1]);
  34. server_addr.sin_port=htons(x);
  35. if(bind(sd,(struct sockaddr *) &server_addr,sizeof(server_addr))<0){
  36. printf("bind error: %s (Errno:%d)\n",strerror(errno),errno);
  37. exit(0);
  38. }
  39. if(listen(sd,3)<0){
  40. printf("listen error: %s (Errno:%d)\n",strerror(errno),errno);
  41. exit(0);
  42. }
  43. int addr_len=sizeof(client_addr);
  44. if((client_sd=accept(sd,(struct sockaddr *) &client_addr,&addr_len))<0){
  45. printf("accept erro: %s (Errno:%d)\n",strerror(errno),errno);
  46. exit(0);
  47. }
  48.  
  49. while(1){
  50. char buff[100];
  51. int len;
  52. if((len=recv(client_sd,buff,sizeof(buff),0))<0){
  53. printf("receive error: %s (Errno:%d)\n", strerror(errno),errno);
  54. exit(0);
  55. }
  56. buff[len]='\0';
  57. printf("RECEIVED INFO: ");
  58. if(strlen(buff)!=0)printf("%s\n",buff);
  59.  
  60. if(strcmp("list",buff)==0){
  61.  
  62. struct dirent *de;
  63. DIR *dr = opendir(".");
  64.  
  65. if (dr == NULL) // opendir returns NULL if couldn't open directory
  66. {
  67. printf("Could not open current directory" );
  68. return 0;
  69. }
  70.  
  71. while ((de = readdir(dr)) != NULL) {
  72. if((len=send(client_sd,de->d_name,strlen(de->d_name),0))<0){
  73.  
  74. printf("Error: %s (Errno:%d)\n",strerror(errno),errno);
  75. exit(0);
  76. }else{
  77. send(client_sd,"\n",strlen("\n"),0);
  78. printf("%s\n", de->d_name);
  79. }
  80. }
  81.  
  82. closedir(dr);
  83. break;
  84.  
  85. }
  86.  
  87.  
  88.  
  89. if(strcmp(buff, "put") == 0){
  90. char fname[50];
  91. char buf[100];
  92. int n;
  93. if((len=recv(client_sd,fname,sizeof(fname),0))<0){
  94. printf("receive error: %s (Errno:%d)\n", strerror(errno),errno);
  95. exit(0);
  96. }
  97. int fd;
  98. printf("File name is :%s\n", fname);
  99. fd=open(fname,O_WRONLY|O_CREAT,S_IRWXU);
  100.  
  101. while ( (n = read(client_sd, buf, strlen(buf)-1)) > 0)
  102. {
  103.  
  104. buf[n] = '\0';
  105. write(fd,buf,n);
  106. if( n < BUFSIZE-2)
  107. break;
  108. }
  109.  
  110. printf("file receiving completed \n");
  111. close(client_sd);
  112. close(fd);
  113. }
  114. }
  115. close(sd);
  116. return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement