Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <netdb.h>
  3. #include <netinet/in.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <sys/socket.h>
  7. #include <sys/types.h>
  8. #define SA struct sockaddr
  9.  
  10. struct packet {
  11. char oper[5];
  12. int int1;
  13. int int2;
  14. };
  15.  
  16. struct resultpacket {
  17. int success;
  18. int result;
  19. };
  20.  
  21. //addition procedure
  22. int addition(int num1, int num2) {
  23. return num1 + num2;
  24. }
  25.  
  26. //subtraction procedure
  27. int subtract(int num1, int num2) {
  28. return num1 - num2;
  29. }
  30.  
  31. //multiplication procedure
  32. int multiply(int num1, int num2) {
  33. return num1 * num2;
  34. }
  35.  
  36. //division procedure
  37. int divide(int num1, int num2) {
  38. if (num2 == 0)
  39. {
  40. return -1;
  41. }
  42. return num1 / num2;
  43. }
  44.  
  45. // Function for send/receive between client and server.
  46. void talk(int sockfd)
  47. {
  48. // infinite loop for send/receive
  49. for (;;) {
  50. int result, success;
  51.  
  52. //create packet for receiving from client
  53. struct packet pkt;
  54. recv(sockfd, &pkt, sizeof(pkt), 0);
  55. printf("Packet from client: %s %d %d\n", pkt.oper, pkt.int1, pkt.int2);
  56.  
  57. struct resultpacket respkt;
  58.  
  59. //check operator from packet
  60. if (strcmp(pkt.oper,"add") == 0) {
  61. result = addition(pkt.int1, pkt.int2);
  62. success = 1;
  63. } else if (strcmp(pkt.oper,"sub") == 0) {
  64. result = subtract(pkt.int1, pkt.int2);
  65. success = 1;
  66. } else if (strcmp(pkt.oper,"mul") == 0) {
  67. result = multiply(pkt.int1, pkt.int2);
  68. success = 1;
  69. } else if (strcmp(pkt.oper,"div") == 0) {
  70. result = divide(pkt.int1, pkt.int2);
  71. if (result == -1) {
  72. success = 0;
  73. } else {
  74. success = 1;
  75. }
  76. }
  77. respkt.success = success;
  78. respkt.result = result;
  79.  
  80. //sending the result packet to client
  81. printf("Sending to client - success: %d / result: %d\n",respkt.success, respkt.result);
  82. send(sockfd, &respkt, sizeof(respkt), 0);
  83. }
  84. }
  85.  
  86. // Server setup function
  87. int main()
  88. {
  89. int sockfd, connfd, len;
  90. struct sockaddr_in servaddr, cli;
  91.  
  92. // socket create and verification
  93. sockfd = socket(AF_INET, SOCK_STREAM, 0);
  94. if (sockfd == -1) {
  95. printf("socket creation failed...\n");
  96. exit(0);
  97. }
  98. else
  99. printf("Socket successfully created..\n");
  100. bzero(&servaddr, sizeof(servaddr));
  101.  
  102. // assign IP, PORT
  103. servaddr.sin_family = AF_INET;
  104. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  105. servaddr.sin_port = htons( 8888 );
  106.  
  107. // Binding newly created socket to given IP and verification
  108. if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) != 0) {
  109. printf("socket bind failed...\n");
  110. exit(0);
  111. }
  112. else
  113. printf("Socket successfully binded..\n");
  114.  
  115. // Now server is ready to listen and verification
  116. if ((listen(sockfd, 5)) != 0) {
  117. printf("Listen failed...\n");
  118. exit(0);
  119. }
  120. else
  121. printf("Server listening..\n");
  122. len = sizeof(cli);
  123.  
  124. // Accept the data packet from client and verification
  125. connfd = accept(sockfd, (SA*)&cli, &len);
  126. if (connfd < 0) {
  127. printf("server acccept failed...\n");
  128. exit(0);
  129. }
  130. else
  131. printf("server acccept the client...\n");
  132.  
  133. // Function for send/receive between client and server
  134. talk(connfd);
  135.  
  136. // After chatting close the socket
  137. close(sockfd);
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement