CursosEmpresasBlogLiveConfPrecios

Sockets

Clase 33 de 37 • Curso de Introducción a C 2019

Clase anteriorSiguiente clase
    William Atef Tadrous

    William Atef Tadrous

    student•
    hace 6 años

    No se si es por mi que no tengo los conocimientos necesarios pero a cada video que veo de este curso tengo que buscar otro en youtube que me lo explique bien. El profesor me cayó bien pero explicar rapido y mal... Es una pena. Es mi cuarto curso en platzi y es la segunda vez que esto pasa. Si se repite no voy a seguir en esta plataforma. Suponiendo su precio (40 euros al mes) veo un mal servicio por ahora

      Victor bustos sazo

      Victor bustos sazo

      student•
      hace 6 años

      Sabes creo que eso ocurre pq tienen algunos errores de indexado los cursos. no están en el orden que deberían, este no es un curso, básico, debe ser puesto en avanzado.. si quieres aprender C, yo aprendí mucho mas con el de programación estructurada. y si yo me sentí igual que tu con este curso. perdido total, ahora lo estoy haciendo nuevamente, igual me pierdo porque el profe sabe mucho. ( este es el curso que deberia ir primero https://platzi.com/clases/programacion-estructurada/ ), supongo que mas adelante tendre la fluides de codigo que el tiene, por ahora solo miro y copio todo lo que hace.

      Jeyson David Vargas Crespo

      Jeyson David Vargas Crespo

      student•
      hace 6 años

      Total, muy buena gente, pero no explica bien.

      Y este curso para mí es avanzado

    Sebastián Ariel Cóceres

    Sebastián Ariel Cóceres

    student•
    hace 5 años

    Unos apuntes que fui anotando a base de varias paginas para entender un poco mas le procedimiento del profesor. | Con C en linux, los pasos que debe seguir un programa servidor son los siguientes:

    1. Apertura de un socket, mediante la función socket(). 2. Avisar al sistema operativo de que hemos abierto un socket y queremos que asocie nuestro programa a dicho socket. Se consigue mediante la función bind(). 3. Avisar al sistema de que comience a atender dicha conexión de red. Se consigue mediante la función listen(). 4. Pedir y aceptar las conexiones de clientes al sistema operativo. Para ello hacemos una llamada a la función accept(). 5. Escribir y recibir datos del cliente, por medio de las funciones write() y read()

    | Los pasos que debe seguir un programa cliente son los siguientes: |

    1. Apertura de un socket, como el servidor. 2. Solicitar conexión con el servidor por medio de la función connect(). 3. Escribir y recibir datos del servidor por medio de las funciones write() y read(). 4. Cerrar la comunicación por medio de close().

    | Los ++sockets++ son utilizados para la comunicación bidireccional entre procesos punto a punto. Se usan en la arquitectura cliente servidor y pueden comunicar procesos incluso desde computadores distintos. | Para realizar esto en C se usa la librería: sys/sockets.h y arpa/inet.h | Funcion getservbyname(char * name, char * proto):

    Esta función devuelve un puntero a estructura en el que uno de sus campos contiene el número de servicio solicitado. (Esta es una manera de automatizar el numero del puerto) Los parámetros de la función son dos cadenas de caracteres: -La primera es el nombre del servicio, tal cual se encuentra en el fichero /etc/services. (C:\windows\system32\drivers\etc\services) -El segundo es el tipo de protocolo que queremos usar. "tcp" o "udp", Dentro de lo que devuelve la función, el número de servicio que nos interesa está en un campo de Puerto

    | Función bind(int s, struct sockaddr *name, int namelen):

    Permite asociar este socket a un puerto para definir el puerto de escucha -s: descripcion del socket devuelta por la funcion socket() -name: Apunta a una estructura sockaddr que contiene el nombre que se vinculará a s -namelen: Tamaño del nombre en bytes, que especifica la longitud de la estructura sockaddr. El valor 0 indica éxito; el valor -1 indica un error

    | Función listen(int s, int backlog):

    Define la configuración abierta del puerto para poder escuchar -s: descripcion del socket -backlog: Longitud máxima de la cola para conexiones pendientes El valor 0 indica éxito; el valor -1 indica un error

    | Función accept(int s, struct sockaddr *addr, int *addrlen):

    mientras el SO escucha y guarda en una cola las conexiones de clientes, esta función remueve el primer elemento de la cola para darle servicio a ese cliente. -s: descripcion del socket -addr: La dirección de socket del cliente conectado -addrlen: número entero que contenga el tamaño en bytes del almacenamiento al que apunta addr Un descriptor de socket no negativo indica éxito; el valor -1 indica un error

    | Función send(int s, char *msg, int len, int flags):

    para enviarle información al cliente -s: Descriptor de socket. -msg: Apunta al búfer que contiene el mensaje a transmitir. -len: Longitud en bytes del búfer al que apunta buf -Flags: La configuración de este parámetro solo se admite para sockets en el dominio AF_INET Ninguna indicación de error en la entrega está implícita en una rutina send (). El valor -1 indica un error detectado localmente

    | Función recv(int s, char *buf, int len, int flags):

    para recibir la información que la otra parte envía. -s: Descriptor de socket. -buf: Apunta al búfer que recibe los datos. -len: Longitud en bytes del búfer al que apunta buf. -Flags: La configuración de este parámetro solo se admite para sockets en el dominio AF_INET se devuelve la longitud en bytes del mensaje o datagrama. El valor -1 indica un error. El valor 0 indica conexión cerrada

    | Función shutdown(int s, int how):

    cierra la conexión -s: Descriptor de socket. -how: La condición de cómo puede tener un valor de 0, 1 o 2, donde: 0 finaliza las operaciones de recepción adicionales. 1 finaliza otras operaciones de envío. 2 extremos más operaciones de envío y recepción. El valor 0 indica éxito; el valor -1 indica un error Las estructuras son usadas en la programación de sockets para almacenar información sobre direcciones.

    | struct sockaddr_in:

    nos ayuda a hacer referencia a los elementos del socket y a identificar quienes son las partes que se comunican. Direccion , Protocolo, etc struct sockaddr_in Dir_Serv; Dir_Serv.sin_family Dir_Serv.sin_port Dir_Serv.sin_addr.s_addr Dir_Serv.sin_zero sin_family es el tipo de conexión (por red o interna) sin_port identifica el puerto al que se debe enlazar la aplicación. sin_addr.s_addr es la dirección del cliente al que queremos atender. Colocando en ese campo el valor INADDR_ANY, atenderemos a cualquier cliente. sin_zero El campo no se utiliza y debe establecerse en ceros. Es relleno de estructura, reservado para campos adicionales en el futuro y evitar bugs.

    | struct sockaddr:

    contiene información del socket. Informacion un poco mas reducida del endpoint, contiene la direccion ip de quienes se comunican. struct sockaddr { unsigned short sa_family; char sa_data[14]; }; -sa_family: tipo de ip AF_INET (IPv4) o AF_INET6 (IPv6) -sa_data: contiene una dirección de destino y un número de puerto para el socket.

    | Funcion socket():

    Incluida en la libreria socket.h int socket (int domain, int type, int protocol) El primer parámetro es para indicar la familia de protoclos. si los clientes pueden estar en otros ordenadores distintos del servidor o van a correr en el mismo ordenador (AF_INET vale para los dos casos o AF_UNIX sólo para el caso de que el cliente corra en el mismo ordenador que el servidor) El segundo parámetro indica si el socket es orientado a conexión (SOCK_STREAM) o no orientados a conexion (SOCK_DGRAM) El tercer parámetro indica el protocolo a emplear. Habitualmente se pone 0 para que se configure de manera automatica. Pero tambien puede valer IPPROTO_UDP o IPPROTO_TCP Devuelve un entero que es el descriptor de fichero o –1 si hubo algún error.
      Luis Xavier Perez Miramontes

      Luis Xavier Perez Miramontes

      student•
      hace 5 años

      Excelente aporte!

      Leandro Tenjo

      Leandro Tenjo

      student•
      hace 5 años

      Este aporte merece mas corazones

    JOSE MANUEL PAREDES RAMIREZ

    JOSE MANUEL PAREDES RAMIREZ

    student•
    hace 5 años

    Sockets Los sockets son utilizados para la comunicación punto a punto bidireccional entre procesos, se usan en la arquitectura de tipo cliente servidor y pueden comunicar procesos incluso desde computadores distintos.

    Para realizar esto en C se usa la librería Socket (<sys/sockets.h> y <arpa/net.h>)

    Para esto son necesarias las direcciones ip de los equipos

    Función bind(): permite asociar este socket a un puerto para definir el puerto de escucha

    Función listen(): define la configuración abierta del puerto para poder escuchar

    Función accept(): mientras el SO escucha y guarda en una cola las conexiones de clientes, esta función remueve el primer elemento de la cola para darle servicio a ese cliente

    Función send(): para enviarle información al cliente

    Función recv(): para recibir la información que la otra parte envía

    Función shutdown(): cierra la conexión

      Eduardo Sebastián Sandoval Jiménez

      Eduardo Sebastián Sandoval Jiménez

      student•
      hace 4 años

      Excelente aporte, gracias por compartir!!!

    Josué Esteban Cordero Ruvalcaba

    Josué Esteban Cordero Ruvalcaba

    student•
    hace 5 años

    Los conceptos de esta clase de ocupa más de una sola de clase de 9 minutos... creo que le falló al equipo de platzi el querer dar un curso de c en menos de 4 horas.., cuando solamente las primeras clases del curso podrían bastar para un curso completo, talvez una buena idea sería que crearán un ruta de aprendizaje exclusivamente para c/c++, se le agradecería eso al team platzi.

    Jean Nuñez

    Jean Nuñez

    student•
    hace 6 años

    Sockets son comunicacion punto a punto bidireccional

    marco antonio

    marco antonio

    student•
    hace 5 años

    sys/sockets.h , netinet/in.h, arpa/inet.h son de linux pero las personas que ocupan windows no se preocupen que ya estoy aqui XD para decirles que se puede usar winsock2 y windows.h aquí dejo el código del profe traducido al windows XD

    #include <winsock2.h> #include <winsock.h> #include <stdio.h> int main(int argc, char **argv) { if(argc < 2){ printf("indica un puerto"); return -1;} WSADATA wsaData = {0}; SOCKET socket_servidor; WORD PuertoW = (WORD)atoi( argv[1] ); SOCKADDR_IN Servidor = {0}; SOCKADDR_IN Cliente = {0}; Servidor.sin_family = AF_INET; Servidor.sin_port = htons(PuertoW); Servidor.sin_addr.s_addr = INADDR_ANY; WSAStartup(MAKEWORD(2,2),&wsaData); if((socket_servidor = socket(AF_INET, SOCK_STREAM,IPPROTO_IP)) == SOCKET_ERROR){ printf("_ERROR_ : No se pudo abir el Socket"); return -2;} if( bind( socket_servidor ,(SOCKADDR *)&Servidor,sizeof(Servidor)) == SOCKET_ERROR ){ printf("Error : al abrir %s",argv[1]); closesocket(socket_servidor); return -3; } printf("Esperando clientes\n"); listen(socket_servidor , 5); }```
      Reinaldo Mendoza

      Reinaldo Mendoza

      student•
      hace 5 años

      Fabuloso, gracias

    Cristian Rosales

    Cristian Rosales

    student•
    hace 6 años

    Sockets🤘🏼

    Abdel Mejia

    Abdel Mejia

    student•
    hace 6 años

    🤯 Genial

    Leandro Tenjo

    Leandro Tenjo

    student•
    hace 5 años

    ya pase por el curso de Programación estructurada Ahora voy a tener que pasar por el de Redes y el de Algoritmos

    Definitivamente este curso no esta en el lugar de la ruta que debería estar

    David Arias Fuentes

    David Arias Fuentes

    student•
    hace 5 años

    Esto en definitiva no es parte de un curso de introducción a C, ya es un nivel intermedio o avanzado, no hay explicación previa sobre Sockets y nada de whiteboarding para una mayor claridad.

    Andres Caro

    Andres Caro

    student•
    hace 5 años
    //Sockets, conección entre cliente y servidor //Ingresamos librerias #include <sys/sockets.h> //Llibreria de los Sockets #include <netinet/in.h> //Libreria de comunicación #include <arpa/inet.h> #include <stdio.h> int main (int argc, const char *argv[] ){ if (argc >1){ int server_socket, client_socket, longitud_cliente, puerto; puerto = atoi (argv[1]); struct sockaddr_in server; //servidor struct sockaddr_in client; //cliente server.sin_family = AF_INET; //Protocolo de internet server.sin_port = htons (puerto); server.sin_addr.s_ddr = INADDR_ANY; //Quien se puede conectar bzero( &(server.sin_zero), 8 ); //Se requiere para usar las librerias de sockets //Socked del servido en modo escucha if((server_socket = socket(AF_INET, SOCK_STREAM, 0) )){ perror("No pude abrir el socket\n" ); return -1; } //Conectar el Socked con un puerto if(bind(server_socket, (struct sockaddr *) &server, sizeof(struct sockaddr))== -1){ perror("no pude abrir el puerto %s\n", argv[1]); return -2; } //Socked de modo escucha if (listen(server_socket, 5 )==-1){ perror("No pude ponerme en modo escucha\n"); } } }```
    Hector Esau

    Hector Esau

    student•
    hace 5 años

    ¿Esto es algo parecido a lo que hace apache?

      Erik Elyager

      Erik Elyager

      student•
      hace 5 años

      Hay ciertas extensiones que permite usar Apache para crear websockets pero es más usado como servidor web http.

    Sebastian Andree Lopera Quevedo

    Sebastian Andree Lopera Quevedo

    student•
    hace 5 años

    no es necesario entender por ahora que son todas esas estructuras y funciones del principio de clase, verdad? solo está bien concer que existen, supongo.. En que curso de platzi puedo aprender más de esto?

      Roger Carlos Ariel Alba

      Roger Carlos Ariel Alba

      student•
      hace 5 años

      Hola!

      Lo ideal es ir haciendo bases solidas. El curso es de introducción y pronto se vienen dos cursos más de C, puedes consultar aquí

    Manuel Fernando Niño Riaño

    Manuel Fernando Niño Riaño

    student•
    hace 6 años

    para iot en tiempo real es mejor sockets o API rest?

      Anthony Smith Quispe De la cruz

      Anthony Smith Quispe De la cruz

      student•
      hace 6 años

      Hola Manuel, las comunicaciones en tiempo real generalmente son un escenario indicado para el uso de sockets, te dejo un blog en el que se realiza una comparativa de ambos: En stackoverflow tambien han tratado el tema: Espero que te ayude y un saludo.

      Anthony Smith Quispe De la cruz

      Anthony Smith Quispe De la cruz

      student•
      hace 6 años

      Te adjunto los enlace en este comentario: [https://www.educba.com/websocket-vs-rest/] [https://stackoverflow.com/questions/28613399/websocket-vs-rest-api-for-real-time-data]

    Jonathan Fernando Santana Quispillo

    Jonathan Fernando Santana Quispillo

    student•
    hace 3 años

    Deben de explicar mejor cada tema de este video, ya hay terminos que no tenemos en claro en cuanto a la comunicaciones :(

    Luis Gabriel Delgado Sanchez

    Luis Gabriel Delgado Sanchez

    student•
    hace 4 años

    Sin duda este ultimo tema "Sockets" lo considero avanzado, si bien voy entendiendo un poco el tema de las estructuras y los punteros, considero que esta bien aprender lo basico sobre este tema.

    Tendre que reforzar con un buen libro. :|

    Lery Andy Piérola Lazarte

    Lery Andy Piérola Lazarte

    student•
    hace 6 años

    Tengo un problema, uso win8 y no puedo ubicar las librerias que se necesitan. Instale codeblocks como se pidio a un principio :( desde Paralelismo no me compila debido a ese tema.

      Nicolas David Pastran Zamora

      Nicolas David Pastran Zamora

      student•
      hace 6 años

      Te recomiendo instalar la terminal de Ubuntu esta en la tienda de Windows.

      Reinaldo Mendoza

      Reinaldo Mendoza

      student•
      hace 5 años

      Puedes usar https://www.onlinegdb.com/

    Alfredo Olmedo

    Alfredo Olmedo

    student•
    hace 5 años

    Aprender duele, es por ello, que es importante que sigamos aun cuando No entendemos, ya lo entenderemos, es como cuando vivimos una experiencia, volteamos en retrospectiva y entendemos por que paso esa situación vivida, así es todo esto, ya entenderemos, solo NO PAREN DE APRENDER.

      Reinaldo Mendoza

      Reinaldo Mendoza

      student•
      hace 5 años

      Creo que tendré que volver a ver esta parte mas adelante porque entiendo el fundamento pero no su implementación

    Bryan Castro

    Bryan Castro

    student•
    hace 5 años

    asco de plataforma no lo explican como deveria ser todos los cursos que pase asta ahora lo explican incompleto y inentendible hay mejores explicaciones en yotube o google solo sacan cursos por sacar no los sacan completos ya que eso cuesta tiempo y dinero solo quieren vendernos humo diciendo si aqui tenemos mas de 400 cursos pero !!!!!INCOMPLETOS Y MAL EXPLICADOS!!!! mejor encontre en la seccion de comentarios mejor informacion y completa de los propios usuarios, lo peor esque hay lavaditos del cerebro que creen que la explicacion estaba bien es un como una secta. >:-)

    Jean Nuñez

    Jean Nuñez

    student•
    hace 6 años

    Sockts no permite comunicar dos procesos cualquiera

Escuelas

  • Desarrollo Web
  • English Academy
  • Marketing Digital
  • Inteligencia Artificial y Data Science
  • Ciberseguridad
  • Liderazgo y Habilidades Blandas
  • Diseño de Producto y UX
  • Contenido Audiovisual
  • Desarrollo Móvil
  • Diseño Gráfico y Arte Digital
  • Programación
  • Negocios
  • Blockchain y Web3
  • Recursos Humanos
  • Finanzas e Inversiones
  • Startups
  • Cloud Computing y DevOps

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads