Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- enum estado {NORMAL, F, FI, FIN};
- int aceptar_conexion(const char* ip, const char* port) {
- struct addrinfo* socketinfo;
- getaddrinfo(ip, port, NULL, socketinfo);
- // Asumo que la primera conexión es válida.
- int skt = socket(socketinfo->ai_family, socketinfo->ai_socktype, socketinfo->ai_protocol);
- // Asumo que no hay errores
- bind(skt, socketinfo->ai_addr, socketinfo->ai_addrlen);
- freeaddrinfo(socketinfo);
- listen(skt, 1);
- return accept(skt);
- }
- int main(int argc, char* argv[]) {
- int skt = aceptar_conexion(argv[1], argv[2]);
- int recibidos;
- char buf[256];
- enum estado estado_actual = NORMAL;
- while ( (recibidos = recv(skt, buf, 256)) > 0 ) {
- for (int i = 0; i < recibidos; i++) {
- if (estado_actual == NORMAL) {
- if (buf[i] == F){
- estado_actual = F;
- } else {
- std::cout << buf[i];
- }
- } else if (estado_actual == F) {
- if (buf[i] == 'I') {
- estado_actual = FI;
- } else {
- estado_actual = NORMAL;
- std::cout << 'F' << buf[i];
- }
- } else if (estado_actual == FI) {
- if (buf[i] == 'N') {
- estado_actual = FIN;
- break;
- } else {
- estado_actual = NORMAL;
- std::cout << 'FI' << buf[i];
- }
- }
- }
- if (estado_actual == FIN) break;
- }
- shutdown(skt, SHUT_RDWR);
- close(skt);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement