d1cor

sock_inet_stream_cli.c

Oct 18th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.29 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : JuncoTIC / UM               *
  4. * Contact    : juncotic.com                *
  5. *******************************************/
  6.  
  7. /*
  8.     Uso:
  9.         ./cliente ip_servidor puerto
  10. */
  11.  
  12.  
  13. #include<stdio.h>
  14. #include<stdlib.h>
  15. #include<sys/types.h>
  16. #include<sys/stat.h>
  17. #include<unistd.h>
  18. #include<string.h>
  19. #include<fcntl.h>
  20. #include<errno.h>
  21. #include<sys/socket.h>
  22. #include<netinet/in.h>
  23. #include <arpa/inet.h>
  24.  
  25. #define BUF_SIZE 1024
  26.  
  27. int main(int argc, char** argv) {
  28.  
  29.     char *error;
  30.  
  31.     int sockid, conn_sock, count;
  32.     struct sockaddr_in direccion;
  33.     char buffer[BUF_SIZE];
  34.  
  35.  
  36.     //creamos el socket inet-stream
  37.     if((sockid=socket(PF_INET,SOCK_STREAM,0))<0){
  38.         error="socket";
  39.         goto err;
  40.     }
  41.  
  42.  
  43.     //seteamos la direccion en la que va a escuchar
  44.     direccion.sin_family=AF_INET; //address family
  45.     direccion.sin_port=htons(atoi(*(argv+2)));
  46.     direccion.sin_addr.s_addr=inet_addr(*(argv+1));
  47.  
  48.  
  49.     //establecemos la conexion con el server (syn, syn-ack, ack)
  50.     if(connect(sockid, (struct sockaddr *)&direccion, sizeof(direccion))<0){
  51.         error="connect";
  52.         goto err;
  53.     }
  54.  
  55.     printf("Conexion establecida!! Procedemos a enviar datos...\n");
  56.  
  57.     // sockid está asociado al conn_sock del servidor, envio de datos
  58.  
  59.     while(count=read(STDIN_FILENO,buffer,BUF_SIZE)){
  60.  
  61.         if((send(sockid, buffer, count, 0))<0){
  62.             error="send";
  63.             goto err;
  64.         }
  65.         printf("Dato enviado...\n");
  66.     }
  67.  
  68.     close(sockid);
  69.  
  70.     return 0;
  71.  
  72. err:
  73.     fprintf(stderr,"%d %s %s\n",errno,error,strerror(errno));
  74.     exit(1);
  75.  
  76. }
  77.  
  78. /*
  79.  
  80. struct sockaddr_in {
  81.     short            sin_family;   // e.g. AF_INET
  82.     unsigned short   sin_port;     // e.g. htons(3490)
  83.     struct in_addr   sin_addr;     // see struct in_addr, below
  84.     char             sin_zero[8];  // zero this if you want to
  85. };
  86.  
  87. struct in_addr {
  88.     unsigned long s_addr;  // load with inet_aton()
  89. };
  90.  
  91.  
  92.  
  93. tcpip conexiones tcp:
  94.     client  server
  95.         > syn       \
  96.         < ack +syn  |   establecimiento de la conexion -> conn_sock
  97.         > ack       /
  98.         ...
  99.         trafico cliente-servidor usando el conn_sock
  100.         ...
  101.         < fin       \
  102.         > ack + fin |   fin de la conexion (circuito virtual tcp)
  103.         < ack       /
  104.  
  105.  
  106.         < fin       \
  107.         > ack       |   fin de la conexion (circuito virtual tcp)
  108.         > fin       |
  109.         < ack       /
  110.  
  111. */
Add Comment
Please, Sign In to add comment