Advertisement
tomasaccini

Untitled

Jul 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.66 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. enum estado {NORMAL, F, FI, FIN};
  4.  
  5. int aceptar_conexion(const char* ip, const char* port) {
  6.     struct addrinfo* socketinfo;
  7.     getaddrinfo(ip, port, NULL, socketinfo);
  8.     // Asumo que la primera conexión es válida.
  9.     int skt = socket(socketinfo->ai_family, socketinfo->ai_socktype, socketinfo->ai_protocol);
  10.     // Asumo que no hay errores
  11.     bind(skt, socketinfo->ai_addr, socketinfo->ai_addrlen);
  12.     freeaddrinfo(socketinfo);
  13.     listen(skt, 1);
  14.     return accept(skt);
  15. }
  16.  
  17. int main(int argc, char* argv[]) {
  18.     int skt = aceptar_conexion(argv[1], argv[2]);
  19.     int recibidos;
  20.     char buf[256];
  21.     enum estado estado_actual = NORMAL;
  22.     while ( (recibidos = recv(skt, buf, 256)) > 0 ) {
  23.         for (int i = 0; i < recibidos; i++) {
  24.             if (estado_actual == NORMAL) {
  25.                 if (buf[i] == F){
  26.                     estado_actual = F;
  27.                 } else {
  28.                     std::cout << buf[i];
  29.                 }
  30.             } else if (estado_actual == F) {
  31.                 if (buf[i] == 'I') {
  32.                     estado_actual = FI;
  33.                 } else {
  34.                     estado_actual = NORMAL;
  35.                     std::cout << 'F' << buf[i];
  36.                 }
  37.             } else if (estado_actual == FI) {
  38.                 if (buf[i] == 'N') {
  39.                     estado_actual = FIN;
  40.                     break;
  41.                 } else {
  42.                     estado_actual = NORMAL;
  43.                     std::cout << 'FI' << buf[i];
  44.                 }
  45.             }
  46.         }
  47.         if (estado_actual == FIN) break;
  48.     }
  49.     shutdown(skt, SHUT_RDWR);
  50.     close(skt);
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement