Advertisement
vegeta322

Projekat Client

Jan 21st, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/socket.h>
  4. #include <arpa/inet.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7. #include <stdbool.h>
  8. #include <stdlib.h>
  9.  
  10. #define DEFAULT_BUFLEN 512
  11. #define DEFAULT_PORT 27015
  12.  
  13. unsigned int sleep(unsigned int seconds);
  14.  
  15. int Meni1() {
  16. int op;
  17. system("clear");
  18. printf("1.) Registruj se\n");
  19. printf("2.) Loginuj se\n");
  20. printf("Izaberite opciju: ");
  21. scanf("%d", &op);
  22.  
  23. return op;
  24. }
  25.  
  26. int Meni2() {
  27. int op;
  28. system("clear");
  29. printf("1.) Upload datoteku na server \n");
  30. printf("2.) Download datoteku sa servera \n");
  31. printf("3.) Prikazi listu datoteka \n");
  32. printf("4.) Odjava sa servera \n");
  33. printf("Izaberite opciju: ");
  34. scanf("%d", &op);
  35.  
  36. return op;
  37. }
  38.  
  39. //////////////////////////////////////// SEND
  40. bool senddata(int sock, void *buf, int buflen)
  41. {
  42. unsigned char *pbuf = (unsigned char *) buf;
  43.  
  44. while (buflen > 0)
  45. {
  46. int num = send(sock, pbuf, buflen, 0);
  47.  
  48. pbuf += num;
  49. buflen -= num;
  50. }
  51.  
  52. return true;
  53. }
  54.  
  55. bool sendlong(int sock, long value)
  56. {
  57. value = htonl(value);
  58. return senddata(sock, &value, sizeof(value));
  59. }
  60.  
  61. bool sendfile(int sock, FILE *f)
  62. {
  63. fseek(f, 0, SEEK_END);
  64. long filesize = ftell(f);
  65. rewind(f);
  66. if (filesize == EOF)
  67. return false;
  68. if(!sendlong(sock, filesize))
  69. return false;
  70. if (filesize > 0)
  71. {
  72. char buffer[1024];
  73. do
  74. {
  75. size_t num;
  76. if(filesize > sizeof(buffer))
  77. num = sizeof(buffer);
  78. else
  79. num = filesize;
  80. num = fread(buffer, 1, num, f);
  81. if (num < 1)
  82. return false;
  83. if (!senddata(sock, buffer, num))
  84. return false;
  85. filesize -= num;
  86. }
  87. while (filesize > 0);
  88. }
  89. return true;
  90. }
  91. //////////////////////////////////////// READ
  92. bool readdata(int sock, void *buf, int buflen)
  93. {
  94. unsigned char *pbuf = (unsigned char *) buf;
  95.  
  96. while (buflen > 0)
  97. {
  98. int num = recv(sock, pbuf, buflen, 0);
  99.  
  100. pbuf += num;
  101. buflen -= num;
  102. }
  103.  
  104. return true;
  105. }
  106.  
  107. bool readlong(int sock, long *value)
  108. {
  109. if (!readdata(sock, value, sizeof(value)))
  110. return false;
  111. *value = ntohl(*value);
  112. return true;
  113. }
  114.  
  115. bool readfile(int sock, FILE *f)
  116. {
  117. long filesize;
  118. if (!readlong(sock, &filesize))
  119. return false;
  120. if (filesize > 0)
  121. {
  122. char buffer[1024];
  123. do
  124. {
  125. int num;
  126. if(filesize > sizeof(buffer))
  127. num = sizeof(buffer);
  128. else
  129. num = filesize;
  130.  
  131. if (!readdata(sock, buffer, num))
  132. return false;
  133. int offset = 0;
  134. do
  135. {
  136. size_t written = fwrite(&buffer[offset], 1, num-offset, f);
  137. if (written < 1)
  138. return false;
  139. offset += written;
  140. }
  141. while (offset < num);
  142. filesize -= num;
  143. }
  144. while (filesize > 0);
  145. }
  146. return true;
  147. }
  148.  
  149. int main(int argc , char *argv[])
  150. {
  151. int sock;
  152. struct sockaddr_in server;
  153. char message[10];
  154. ///////////////
  155. char username[DEFAULT_BUFLEN];
  156. char password[10];
  157. int opcija;
  158. int flagreg = -1;
  159. int flaglog = -1;
  160.  
  161. //Create socket
  162. sock = socket(AF_INET , SOCK_STREAM , 0);
  163. if (sock == -1)
  164. {
  165. printf("Could not create socket");
  166. }
  167. puts("Socket created");
  168.  
  169. server.sin_addr.s_addr = inet_addr("192.168.1.102");
  170. server.sin_family = AF_INET;
  171. server.sin_port = htons(DEFAULT_PORT);
  172.  
  173. //Connect to remote server
  174. if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
  175. {
  176. perror("connect failed. Error");
  177. return 1;
  178. }
  179. puts("Connected\n");
  180.  
  181. while(1) {
  182.  
  183. opcija = Meni1();
  184. send(sock, &opcija, sizeof(opcija), 0);
  185. switch(opcija) {
  186. case 1 :
  187. system("clear");
  188. printf("* Registracija *\n");
  189. printf("Unesite username: ");
  190. scanf("%s", username);
  191. if(send(sock, username, strlen(username), 0) < 0) {
  192. printf("Klijent: neuspesno slanje");
  193. return 1;
  194. }
  195. printf("Unesite password: ");
  196. scanf("%s", password);
  197. if(send(sock, password, strlen(password), 0) < 0) {
  198. printf("Klijent: neuspesno slanje");
  199. return 1;
  200. }
  201. recv(sock, &flagreg, sizeof(flagreg), 0);
  202. printf("Flagreg : %d\n", flagreg);
  203. break;
  204. case 2 :
  205. system("clear");
  206. printf("* Login *\n");
  207. printf("Unesite username: ");
  208. scanf("%s", username);
  209. if(send(sock, username, strlen(username), 0) < 0) {
  210. printf("Klijent: neuspesno slanje");
  211. return 1;
  212. }
  213. printf("Unesite password: ");
  214. scanf("%s", password);
  215. if(send(sock, password, strlen(password), 0) < 0) {
  216. printf("Klijent: neuspesno slanje");
  217. return 1;
  218. }
  219. recv(sock, &flaglog, sizeof(flaglog), 0);
  220. printf("Flagreg : %d\n", flaglog);
  221. break;
  222. default :
  223. printf("Pogresna opcija\n");
  224. sleep(1);
  225. break;
  226. }
  227. sleep(3);
  228. system("clear");
  229. if(flagreg == 0)
  230. break;
  231. else if(flaglog == 0)
  232. break;
  233. }
  234. int flagwrite = -1;
  235. int flagread = -1;
  236. FILE *fp;
  237. char ime[DEFAULT_BUFLEN];
  238. char lista[DEFAULT_BUFLEN];
  239.  
  240. while(1) {
  241.  
  242. opcija = Meni2();
  243. send(sock, &opcija, sizeof(opcija), 0);
  244. switch(opcija) {
  245. case 1 :
  246. system("clear");
  247. printf("Unesite puno ime datoteke: ");
  248. scanf("%s", ime);
  249. send(sock, ime, strlen(ime), 0);
  250.  
  251. recv(sock, &flagwrite, sizeof(flagwrite), 0);
  252. if(flagwrite == 0) {
  253. fp = fopen(ime, "rb");
  254. sendfile(sock, fp);
  255. fclose(fp);
  256. printf("Uspesno upisana datoteka u listu\n");
  257. }
  258. else
  259. printf("Datoteka sa istim imenom vec postoji\n");
  260. sleep(2);
  261. break;
  262. case 2 :
  263. system("clear");
  264. printf("Unesite puno ime datoteke: ");
  265. scanf("%s", ime);
  266. send(sock, ime, strlen(ime), 0);
  267.  
  268. recv(sock, &flagread, sizeof(flagread), 0);
  269. if(flagread == 0) {
  270. fp = fopen(ime, "wb");
  271. readfile(sock, fp);
  272. fclose(fp);
  273. printf("Uspesno preuzeta datoteka\n");
  274. }
  275. else
  276. printf("Neuspesno preuzimanje datoteke\n");
  277. sleep(2);
  278. break;
  279. case 3 :
  280. system("clear");
  281. printf("LISTA\n");
  282. int read_size = recv(sock, lista, DEFAULT_BUFLEN, 0);
  283. lista[read_size] = '\0';
  284. printf("%s", lista);
  285. sleep(2);
  286. break;
  287. case 4 :
  288. system("clear");
  289. printf("Uspesno ste odjavljeni sa servera\n");
  290. sleep(1);
  291. break;
  292. default :
  293. printf("Pogresna opcija\n");
  294. sleep(1);
  295. break;
  296. }
  297. if(opcija == 4)
  298. break;
  299. }
  300.  
  301. close(sock);
  302.  
  303. return 0;
  304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement