Advertisement
Guest User

Untitled

a guest
May 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. /*
  2. Angela Popovich
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <netdb.h>
  10. #include <string.h>
  11.  
  12. #define SOCK_TYPE SOCK_DGRAM
  13.  
  14. #define MAXBUFLEN 1024
  15.  
  16. #define MSG_WELCOME "welcome"
  17. #define MSG_READY "ready"
  18. #define MSG_PLAY "play"
  19. #define MSG_ROUND "round"
  20. #define MSG_GAME "game"
  21. #define MSG_BUSY "busy"
  22.  
  23. #define MSG_JOIN "join"
  24. #define MSG_SHOW "show"
  25.  
  26. enum PlayerState{
  27. START,
  28. READY,
  29. CHOOSE,
  30. END,
  31. ERROR
  32. };
  33.  
  34. struct Player{
  35. char ID[20];
  36. char choice[3];
  37. };
  38.  
  39. int main(int argc, char *argv[]){
  40.  
  41. int sockfd, portno, server_addr_len;
  42.  
  43. struct sockaddr_in server_addr, player_addr, serv_addr;
  44. //struct in_addr serv_addr, player_addr;
  45. int bytes_sent, bytes_received;
  46.  
  47. // Make sure we have enough arguments
  48. if(argc < 2){
  49. perror("client: not enough arguments passed");
  50. return -1;
  51. }
  52.  
  53.  
  54. // send and receive buffers
  55. char buffer[MAXBUFLEN];
  56. char msg[MAXBUFLEN];
  57. char arg[MAXBUFLEN];
  58.  
  59. // state of the player
  60. enum PlayerState state;
  61.  
  62. // set the socket
  63. sockfd = socket(PF_INET, SOCK_TYPE,0);
  64.  
  65. // if socket error occurs
  66. if(sockfd < 0){
  67. perror("client: error creating socket");
  68. return -1;
  69. }
  70.  
  71. portno = atoi(argv[2]);
  72.  
  73. serv_addr.sin_family = AF_INET;
  74. serv_addr.sin_addr.s_addr = htonl(strtoul(argv[2]));
  75. serv_addr.sin_port = htons(portno);
  76.  
  77. player_addr.sin_family = AF_INET;
  78. player_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  79. player_addr.sin_port = htons(portno);
  80.  
  81. if(connect(sockfd, &serv_addr, sizeof(serv_addr)) < 0){
  82. perror("Error connecting");
  83. return -1;
  84. }
  85.  
  86. /* define player for me, could be made differently*/
  87.  
  88. struct Player me, opponent;
  89. char name[] = "apopovi";
  90. strcpy(me.ID, name);
  91.  
  92. // Set state to start
  93. state = START;
  94.  
  95. while((state != END) && (state != ERROR)){
  96.  
  97. switch(state){
  98.  
  99. case START:
  100. sprintf(buffer, "%s %s", MSG_READY,me.ID);
  101. bytes_sent = sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *) &player_addr, sizeof(player_addr));
  102. if(bytes_sent < 0){
  103. perror("client: [Join] error sending join message to server");
  104. state = ERROR;
  105. break;
  106. }
  107. else{
  108. state = READY;
  109. break;
  110. }
  111.  
  112. case READY:
  113. server_addr_len = sizeof(server_addr);
  114. bytes_received = recvfrom(sockfd, buffer, MAXBUFLEN-1, 0, (struct sockaddr *) &player_addr, &server_addr_len);
  115. if(bytes_received < 0){
  116. perror("client: [Ready] error receiving message from server");
  117. state = ERROR;
  118. break;
  119. }
  120.  
  121. buffer[bytes_received] = '\0';
  122.  
  123. printf("server: %s",buffer);// output message received
  124.  
  125. //extract message
  126. sscanf(buffer,"%s %s",msg,arg);
  127.  
  128. if(strcmp(msg,MSG_READY) == 0){
  129. strcpy(opponent.ID,arg);
  130. state = CHOOSE;
  131. }
  132. else if(strcmp(msg,MSG_GAME) == 0){
  133. state = END;
  134. }
  135. break;
  136.  
  137. case CHOOSE:
  138. bytes_received = recvfrom(sockfd, buffer, MAXBUFLEN-1, 0, (struct sockaddr *) &player_addr, &server_addr_len);
  139. if(bytes_received < 0){
  140. perror("client: [Ready] error receiving message from server");
  141. state = ERROR;
  142. break;
  143. }
  144.  
  145. printf("server: %s",buffer);// output message received
  146.  
  147. //extract message
  148. sscanf(buffer,"%s %s",msg,opponent.ID);
  149.  
  150. if(strcmp(msg,MSG_PLAY) == 0){
  151. printf("Choose rock (r) paper (p) or scissors (s)\n");
  152. scanf("%c",me.choice);
  153. strcpy(buffer,MSG_SHOW);
  154. arg[0] = " ";
  155. arg[1] = me.choice;
  156. arg[2] = '\0';
  157. strcat(buffer,arg);
  158.  
  159. bytes_sent = sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *) &player_addr, sizeof(player_addr));
  160. if(bytes_sent < 0){
  161. perror("client: [Play] error sending join message to server");
  162. state = ERROR;
  163. break;
  164. }
  165.  
  166. state = READY;
  167. }
  168. break;
  169.  
  170. case ERROR:
  171. printf("Error occured, ending program\n");
  172. return -1;
  173.  
  174. case END:
  175. printf("Game over\n");
  176. return -1;
  177. }
  178.  
  179. return 0;
  180. }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement