d1cor

sock_inet_stream_cli_io.c

Nov 1st, 2017
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.66 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : juncotic.com  / um.edu.ar   *
  4. *******************************************/
  5.  
  6. /*
  7.     Uso:
  8.         ./cliente ip_servidor puerto
  9. */
  10.  
  11.  
  12. #include<stdio.h>
  13. #include<stdlib.h>
  14. #include<sys/types.h>
  15. #include<sys/stat.h>
  16. #include<unistd.h>
  17. #include<string.h>
  18. #include<fcntl.h>
  19. #include<errno.h>
  20. #include<sys/socket.h>
  21. #include<netinet/in.h>
  22. #include <arpa/inet.h>
  23.  
  24. #define BUF_SIZE 1024
  25.  
  26. int main(int argc, char** argv) {
  27.  
  28.     char *error;
  29.  
  30.     int sockid, conn_sock, count;
  31.     struct sockaddr_in direccion;
  32.     char buffer[BUF_SIZE];
  33.  
  34.  
  35.     //creamos el socket inet-stream
  36.     if((sockid=socket(PF_INET,SOCK_STREAM,0))<0){
  37.         error="socket";
  38.         goto err;
  39.     }
  40.  
  41.  
  42.     //seteamos la direccion en la que va a escuchar
  43.     direccion.sin_family=AF_INET; //address family
  44.     direccion.sin_port=htons(atoi(*(argv+2)));
  45.     direccion.sin_addr.s_addr=inet_addr(*(argv+1));
  46.  
  47.  
  48.     //establecemos la conexion con el server (syn, syn-ack, ack)
  49.     if(connect(sockid, (struct sockaddr *)&direccion, sizeof(direccion))<0){
  50.         error="connect";
  51.         goto err;
  52.     }
  53.  
  54.     printf("Conexion establecida!! Soy %d\n",getpid());
  55.  
  56.     // sockid está asociado al conn_sock del servidor, envio de datos
  57.  
  58.     while(count=read(STDIN_FILENO,buffer,BUF_SIZE)){
  59.  
  60.         if((send(sockid, buffer, count, 0))<0){
  61.             error="send";
  62.             goto err;
  63.         }
  64.         printf("%d enviado...\n",getpid());
  65.         if((recv(sockid, buffer, BUF_SIZE,0))<0){
  66.             error="recv";
  67.             goto err;
  68.         }
  69.         printf("%d recibiendo ACK: %s",getpid(),buffer);
  70.     }
  71.  
  72.     close(sockid);
  73.  
  74.     return 0;
  75.  
  76. err:
  77.     fprintf(stderr,"%d %s %s\n",errno,error,strerror(errno));
  78.     exit(1);
  79.  
  80. }
Add Comment
Please, Sign In to add comment