d1cor

sock_inet_stream_cli.c

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