Advertisement
Guest User

C tcp master - server strlen w/ fork xarentek

a guest
Oct 17th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. SERVER
  2. ##################3
  3. #include <stdio.h>
  4. #include <sys/socket.h>
  5. #include <stdlib.h>
  6. #include <netinet/in.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9.  
  10. #define PORT 8083
  11. #define MAXLEN 255
  12. #define LISTEN 5
  13.  
  14.  
  15. void die(char *error);
  16. void handle(int d);
  17. int main(int argc, char const *argv[]) {
  18.  
  19. int res,lis;
  20.  
  21. int master_d,slave_d;
  22. struct sockaddr_in bind_ip_port,client_ip_port;
  23. int bind_ip_port_length = sizeof(bind_ip_port);
  24. int client_ip_port_length = sizeof(client_ip_port);
  25.  
  26.  
  27. //FORK - childs
  28. pid_t pid;
  29.  
  30. master_d = socket(AF_INET, SOCK_STREAM, 0);
  31.  
  32. if(master_d < 0) {
  33. die("Could not initialize master socket !\n");
  34. }
  35. printf("Socket master initialized !\n");
  36.  
  37.  
  38. //setting vars for socket
  39. bind_ip_port.sin_family = AF_INET;
  40. bind_ip_port.sin_addr.s_addr = inet_addr("127.0.0.1");
  41. bind_ip_port.sin_port = htons(PORT);
  42.  
  43.  
  44. //binding
  45. res = bind(master_d, (struct sockaddr *)&bind_ip_port, bind_ip_port_length);
  46.  
  47. if(res<0){
  48. die("Could not bind to port \n");
  49. }
  50. printf("Bind successfull !\n");
  51.  
  52. //listening
  53. lis = listen(master_d, LISTEN);
  54.  
  55. if(lis<0){
  56. die("Could not listen on socket !\n");
  57. }
  58. printf("Listening ....\n");
  59.  
  60.  
  61.  
  62.  
  63. while(1){
  64.  
  65. slave_d = accept(master_d, (struct addr *)&bind_ip_port, &bind_ip_port_length);
  66.  
  67. if(slave_d<0){
  68. die("Could not accept anything !\n");
  69. }
  70. printf("Accepting ...");
  71.  
  72. pid = fork(); // clona il processo
  73. // 3 casi -- > < 0 | = 0 | > 0
  74. if(pid <0){
  75. die("Error fork\n");
  76. }
  77. printf("Fork ok\n");
  78.  
  79. if(pid>0){
  80. // riservato al padre
  81. close(slave_d); // chiudiamo il socket slave
  82. }else{
  83. close(master_d);
  84. handle(slave_d);
  85. close(slave_d);
  86. exit(0);
  87. }
  88.  
  89.  
  90. }
  91. close(master_d);
  92.  
  93. return 0;
  94.  
  95. }
  96.  
  97.  
  98. void handle(int d) {
  99.  
  100. char recvbuff[MAXLEN];
  101. int sendint;
  102. // memset(sendbuff, 0, MAXLEN);
  103. memset(recvbuff, 0, MAXLEN);
  104.  
  105. int bytesrecvd = recv(d, recvbuff, MAXLEN, 0);
  106. if(bytesrecvd <= 0) die("Could not receive ! \n");
  107. printf("Received %s\n",recvbuff);
  108. printf("Bytes received ! \n");
  109.  
  110. sendint = (int)strlen(recvbuff);
  111. int sendintx;
  112.  
  113. printf("Strlen %d \n",strlen(recvbuff));
  114. sendintx = htonl(sendint);
  115. printf("Decoding %d\n",ntohl(sendintx));
  116. printf("Sending %d\n",sendint);
  117. int bytesent = send(d, &sendintx, sizeof(sendintx), 0);
  118.  
  119. if(bytesent <= 0){
  120. die("Could not reply to client !\n");
  121. }
  122.  
  123. printf("Replied to client with %d bytes\n",bytesent);
  124. printf("Coded : %d\n",sendintx);
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. }
  133.  
  134.  
  135. void die(char * error){
  136. fprintf(stderr , "%s.\n", error);
  137. exit(1);
  138. }
  139.  
  140.  
  141. #######
  142. CLIENT
  143.  
  144. #########3
  145.  
  146. #include <stdio.h>
  147. #include <sys/socket.h>
  148. #include <stdlib.h>
  149. #include <netinet/in.h>
  150. #include <string.h>
  151. #include <unistd.h>
  152.  
  153. #define PORT 8083
  154. #define MAXLEN 255
  155. void die(char *error);
  156.  
  157. int main(int argc, char const *argv[])
  158. {
  159. int master_d;
  160. char sendbuff[MAXLEN];
  161.  
  162. struct sockaddr_in server_ip_port;
  163. int server_ip_port_length = sizeof(server_ip_port);
  164.  
  165. memset(sendbuff, 0 , MAXLEN);
  166.  
  167. master_d = socket(AF_INET, SOCK_STREAM, 0); // socket descriptor
  168. printf("Masterd %d \n",master_d);
  169. if(master_d < 0){
  170. die("Could not connect \n");
  171. }
  172. printf("Connected !\n");
  173.  
  174.  
  175.  
  176. printf("Text to send : %s \n",sendbuff);
  177. server_ip_port.sin_family = AF_INET;
  178. server_ip_port.sin_addr.s_addr = inet_addr("127.0.0.1");
  179. server_ip_port.sin_port = htons(PORT);
  180.  
  181.  
  182. printf("Trying to connect !\n");
  183. if(connect(master_d, (struct sockaddr *)&server_ip_port, server_ip_port_length)<0){
  184. die("Could not connect to server !\n");
  185. }
  186. printf("Connected to server !\n");
  187.  
  188.  
  189. printf("Inserisci Stringa: ");
  190. gets(sendbuff);
  191. int bytesent = send(master_d , sendbuff , sizeof(sendbuff), 0);
  192. printf("%d bytes sent\n", &bytesent);
  193. if(bytesent <= 0) {
  194. die("Could not send any bytes !");
  195.  
  196. }
  197. printf("Bytes sent %d \n",bytesent);
  198. printf("Sent: %s \n",sendbuff);
  199.  
  200. int recvint;
  201.  
  202. int bytesrecvd = recv(master_d, &recvint , sizeof(recvint) , 0);
  203.  
  204. if(bytesrecvd <= 0) {
  205. die("Could not receive any bytes");
  206. }
  207. printf("Received %d bytes\n", bytesrecvd);
  208. recvint = ntohl(recvint);
  209.  
  210. printf("Received : %d\n",recvint);
  211. close(master_d);
  212. return 0;
  213.  
  214. }
  215.  
  216.  
  217. void die(char * error){
  218. fprintf(stderr , "%s.\n", error);
  219. exit(1);
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement