Advertisement
patryk

SK - Lab 05.11

Nov 5th, 2015
726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.93 KB | None | 0 0
  1. ############# DAYTIME Z WYKORZYSTANIEM UDP
  2.  
  3. #include <stdio.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <netdb.h>
  8. #include <stdlib.h>
  9. #include <unistd.h>
  10. #include <string.h>
  11. #include <arpa/inet.h>
  12.  
  13. #define BUFSIZE 10000
  14.        
  15. char bufor[BUFSIZE];
  16. int resp;
  17.  
  18. char *service = "daytime";
  19. char *protocol = "udp";
  20.  
  21. int main (int argc, char** argv) {
  22.        
  23.         struct sockaddr_in      sck_addr;
  24.         struct hostent          *host_ptr;
  25.         struct protoent         *protocol_ptr;
  26.         struct servent          *service_ptr;
  27.  
  28.         int sck, odp;
  29.        
  30.         if (argc < 2) {
  31.                 printf ("Podaj nazwę serwera\n");
  32.                 exit (EXIT_FAILURE);  
  33.         }
  34.  
  35.         printf ("Usługa %d na %s z serwera %s :\n", service, protocol, argv[1]);
  36.         fflush(stdout);
  37.  
  38.         if ((host_ptr = gethostbyname (argv[1])) == NULL) {
  39.                 perror("Nie znaleziono serwera");
  40.                 exit(EXIT_FAILURE);
  41.         }
  42.  
  43.         if ((protocol_ptr = getprotobyname (protocol)) == NULL) {
  44.                 perror ("Nie znaleziono protokołu");
  45.                 exit(EXIT_FAILURE);
  46.         }
  47.  
  48.         if ((service_ptr = getservbyname (service, protocol)) == NULL) {
  49.                 perror ("Nie znaleziono uslugi");
  50.                 exit(EXIT_FAILURE);
  51.         }
  52.  
  53.         memset (&sck_addr, 0, sizeof sck_addr);
  54.         sck_addr.sin_family = host_ptr -> h_addrtype;
  55.         memcpy ((char*) &sck_addr.sin_addr, (char*) host_ptr -> h_addr, host_ptr -> h_length);
  56.         sck_addr.sin_port = service_ptr ->s_port;
  57.  
  58.         if ((sck = socket (PF_INET, SOCK_DGRAM, protocol_ptr -> p_proto)) < 0) {
  59.                 perror ("Nie można utworzyć gniazdka");
  60.                 exit (EXIT_FAILURE);
  61.         }
  62.  
  63.         if (connect (sck, (struct sockaddr*) &sck_addr, sizeof sck_addr) < 0) {
  64.                 perror ("Brak połączenia");
  65.                 exit (EXIT_FAILURE);
  66.         }
  67.  
  68.     send(sck, "", 1, 0);
  69.         resp = recv(sck, bufor, BUFSIZE, 0);
  70.     printf (bufor);
  71.     fflush (stdout);
  72.     close (sck);
  73.  
  74.         exit (EXIT_SUCCESS);
  75. }
  76.  
  77.  
  78.  
  79.  
  80. ################ DAYTIME Z WYKORZYSTANIEM UDP (BEZ CONNECT'A)
  81.  
  82. #include <stdio.h>
  83. #include <sys/types.h>
  84. #include <sys/socket.h>
  85. #include <netinet/in.h>
  86. #include <netdb.h>
  87. #include <stdlib.h>
  88. #include <unistd.h>
  89. #include <string.h>
  90. #include <arpa/inet.h>
  91.  
  92. #define BUFSIZE 10000
  93.        
  94. char bufor[BUFSIZE];
  95. int resp;
  96.  
  97. char *service = "daytime";
  98. char *protocol = "udp";
  99.  
  100. int main (int argc, char** argv) {
  101.        
  102.         struct sockaddr_in      sck_addr;
  103.         struct hostent          *host_ptr;
  104.         struct protoent         *protocol_ptr;
  105.         struct servent          *service_ptr;
  106.  
  107.         int sck, odp;
  108.        
  109.         if (argc < 2) {
  110.                 printf ("Podaj nazwę serwera\n");
  111.                 exit (EXIT_FAILURE);  
  112.         }
  113.  
  114.         printf ("Usługa %d na %s z serwera %s :\n", service, protocol, argv[1]);
  115.         fflush(stdout);
  116.  
  117.         if ((host_ptr = gethostbyname (argv[1])) == NULL) {
  118.                 perror("Nie znaleziono serwera");
  119.                 exit(EXIT_FAILURE);
  120.         }
  121.  
  122.         if ((protocol_ptr = getprotobyname (protocol)) == NULL) {
  123.                 perror ("Nie znaleziono protokołu");
  124.                 exit(EXIT_FAILURE);
  125.         }
  126.  
  127.         if ((service_ptr = getservbyname (service, protocol)) == NULL) {
  128.                 perror ("Nie znaleziono uslugi");
  129.                 exit(EXIT_FAILURE);
  130.         }
  131.  
  132.         memset (&sck_addr, 0, sizeof sck_addr);
  133.         sck_addr.sin_family = host_ptr -> h_addrtype;
  134.         memcpy ((char*) &sck_addr.sin_addr, (char*) host_ptr -> h_addr, host_ptr -> h_length);
  135.         sck_addr.sin_port = service_ptr ->s_port;
  136.  
  137.         if ((sck = socket (PF_INET, SOCK_DGRAM, protocol_ptr -> p_proto)) < 0) {
  138.                 perror ("Nie można utworzyć gniazdka");
  139.                 exit (EXIT_FAILURE);
  140.         }
  141.  
  142.     sendto(sck, "", 1, 0, (struct sockaddr*)&sck_addr, sizeof sck_addr);
  143.     int sck_len = sizeof sck_addr;
  144.         resp = recvfrom(sck, bufor, BUFSIZE, 0, (struct sockaddr*)&sck_addr, &sck_len);
  145.     printf (bufor);
  146.     fflush (stdout);
  147.     close (sck);
  148.  
  149.         exit (EXIT_SUCCESS);
  150. }
  151.  
  152.  
  153.  
  154.  
  155. ############# SERWER ECHO UDP
  156.  
  157. #include <unistd.h>
  158. #include <sys/types.h>
  159. #include <sys/wait.h>
  160. #include <sys/socket.h>
  161. #include <netinet/in.h>
  162. #include <netdb.h>
  163. #include <signal.h>
  164. #include <stdio.h>
  165. #include <stdlib.h>
  166. #include <string.h>
  167. #include <arpa/inet.h>
  168. #include <time.h>
  169.  
  170. #define SERVER_PORT 1234
  171. #define QUEUE_SIZE 5
  172.  
  173. int main(int argc, char* argv[])
  174. {
  175.    int nSocket, nClientSocket;
  176.    int nBind, nListen;
  177.    int nFoo = 1;
  178.    socklen_t nTmp;
  179.    int BUFSIZE = 10000;
  180.    char bufor [BUFSIZE];
  181.    struct sockaddr_in stAddr, stClientAddr;
  182.  
  183.  
  184.    /* address structure */
  185.    memset(&stAddr, 0, sizeof(struct sockaddr));
  186.    stAddr.sin_family = AF_INET;
  187.    stAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  188.    stAddr.sin_port = htons(SERVER_PORT);
  189.  
  190.    /* create a socket */
  191.    nSocket = socket(AF_INET, SOCK_DGRAM, 0);
  192.    if (nSocket < 0)
  193.    {
  194.        fprintf(stderr, "%s: Can't create a socket.\n", argv[0]);
  195.        exit(1);
  196.    }
  197.    setsockopt(nSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&nFoo, sizeof(nFoo));
  198.  
  199.    /* bind a name to a socket */
  200.    nBind = bind(nSocket, (struct sockaddr*)&stAddr, sizeof(struct sockaddr));
  201.    if (nBind < 0)
  202.    {
  203.        fprintf(stderr, "%s: Can't bind a name to a socket.\n", argv[0]);
  204.        exit(1);
  205.    }
  206.  
  207.    
  208.    while(1) {
  209.     memset(&bufor, 0, BUFSIZE);
  210.     int sck_len = sizeof stAddr;
  211.     recvfrom(nSocket, bufor, BUFSIZE, 0, (struct sockaddr*) &stAddr, &sck_len);
  212.     sendto(nSocket, bufor, BUFSIZE, 0, (struct sockaddr*) &stAddr, sizeof stAddr);
  213.    }
  214.  
  215.    close(nSocket);
  216.    return(0);
  217. }
  218.  
  219.  
  220.  
  221.  
  222.  
  223. ######## CLIENT ECHO UDP
  224.  
  225. #include <stdio.h>
  226. #include <sys/types.h>
  227. #include <sys/socket.h>
  228. #include <netinet/in.h>
  229. #include <netdb.h>
  230. #include <stdlib.h>
  231. #include <unistd.h>
  232. #include <string.h>
  233. #include <arpa/inet.h>
  234.  
  235. #define BUFSIZE 10000
  236.  
  237. char *server = "127.0.0.1"; /* adres IP pętli zwrotnej */
  238. char *protocol = "udp";
  239. short service_port = 1234;  /* port usługi daytime */
  240.  
  241. char bufor[BUFSIZE];
  242.  
  243. int main ()
  244. {
  245.     struct sockaddr_in sck_addr;
  246.  
  247.     int sck, resp;
  248.  
  249.     printf ("Usługa %d na %s z serwera %s :\n", service_port, protocol, server);
  250.  
  251.     memset (&sck_addr, 0, sizeof sck_addr);
  252.     sck_addr.sin_family = AF_INET;
  253.     inet_aton (server, &sck_addr.sin_addr);
  254.     sck_addr.sin_port = htons (service_port);
  255.  
  256.     if ((sck = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
  257.         perror ("Nie można utworzyć gniazdka");
  258.         exit (EXIT_FAILURE);
  259.     }
  260.     gets(bufor);
  261.     sendto(sck, bufor, BUFSIZE, 0, (struct sockaddr*)&sck_addr, sizeof sck_addr);
  262.     int sck_len = sizeof sck_addr;
  263.     memset(&bufor, 0, BUFSIZE);
  264.         resp = recvfrom(sck, bufor, BUFSIZE, 0, (struct sockaddr*)&sck_addr, &sck_len);
  265.     printf (bufor);
  266.     fflush (stdout);
  267.     close (sck);
  268.    
  269.  
  270.     exit (EXIT_SUCCESS);
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement