Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9. #include <time.h>
  10. #include <limits.h>
  11.  
  12. #define MAXLINE 1024
  13. #define PACKET_SIZE 1038
  14. #define SERV_PORT 10010
  15.  
  16. /* Global Variables */
  17. int sequence;
  18. char string[MAXLINE], packet[PACKET_SIZE];
  19. int sequenceNumber;
  20. short totalMessageLength;
  21. long timestamp;
  22.  
  23. void addSequenceNumber() {
  24. sequenceNumber = htonl(sequence);
  25. memcpy(packet + sizeof(short), &sequenceNumber, sizeof(int));
  26. }
  27.  
  28. void deconstructPacket() {
  29. memcpy(&totalMessageLength, packet, sizeof(short));
  30. totalMessageLength = ntohs(totalMessageLength);
  31. memcpy(&sequenceNumber, packet + sizeof(short), sizeof(int));
  32. sequenceNumber = ntohl(sequenceNumber);
  33. memcpy(&timestamp, packet + sizeof(short) + sizeof(int), sizeof(long));
  34. timestamp = be64toh(timestamp);
  35. memcpy(&string, packet + sizeof(short) + sizeof(int) + sizeof(long), MAXLINE);
  36. }
  37.  
  38. int main (int arc, char **argv) {
  39. int dataSocket, n;
  40. socklen_t clientLength;
  41. struct sockaddr_in clientSocketAddress, serverSocketAddress;
  42.  
  43. /* Create the socket with error detection */
  44. if ((dataSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
  45. perror("Problem creating the socket");
  46. exit(2);
  47. }
  48.  
  49. /* Prepare for the socket address */
  50. memset(&serverSocketAddress, 0, sizeof(serverSocketAddress));
  51. memset(&clientSocketAddress, 0, sizeof(clientSocketAddress));
  52. serverSocketAddress.sin_family = AF_INET;
  53. serverSocketAddress.sin_addr.s_addr = INADDR_ANY;
  54. serverSocketAddress.sin_port = htons(SERV_PORT);
  55. clientLength = sizeof(clientSocketAddress);
  56.  
  57. if (bind(dataSocket, (struct sockaddr *) &serverSocketAddress, sizeof(serverSocketAddress)) < 0) {
  58. perror("Problem binding the socket");
  59. exit(3);
  60. }
  61.  
  62. printf("%s\n", "Server running... waiting for connections.");
  63.  
  64. sequence = 0;
  65. /* Client handler */
  66. for ( ; ; ) {
  67.  
  68. /* Recieve from a client */
  69. n = recvfrom(dataSocket, packet, PACKET_SIZE, MSG_WAITALL, (struct sockaddr *) &clientSocketAddress, &clientLength);
  70. printf("%s", "String received from and resent to the client: ");
  71.  
  72. deconstructPacket();
  73. puts(string);
  74.  
  75. /* Send back to a client */
  76. addSequenceNumber();
  77. if (n = sendto(dataSocket, packet, totalMessageLength, 0, (struct sockaddr *) &clientSocketAddress, sizeof(clientSocketAddress)) < 0) {
  78. perror("Problem adding the packet to the buffer");
  79. exit(4);
  80. }
  81.  
  82. /* Increment sequence number wrapping around to 0 at (2^32 - 1) */
  83. if (sequence < UINT_MAX) {
  84. sequence++;
  85. }
  86. else {
  87. sequence = 0;
  88. }
  89. }
  90. close(dataSocket);
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement