Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/04/2014, 14:10
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema cuando atacan a mi programa C++

Muy bueno tu ejemplo, pude comprender, si es probable que esté violando la memoria de mi ordenador, pero no se como poder solucionarlo.
Cuando ese mensaje con símbolos lo envía tan sólo 1 usuario, el programa no cierra (poniendo el buffer en 256), por lo que no es problema de recibir esos símbolos o códigos binarios, el problema viene cuando envían demasiadas veces ese mensaje.

En Python y en muchos otros lenguajes, por lo general y dependiendo de que se quiera hacer, lo recomendable son 1024 Bytes de buffer y creo que para el programa que necesito estaría bien, de hecho nunca tube problema con mi otro bot en Python, hasta incluso en ese bot en Python lo he llegado a probar con un buffer de 4096 y tampoco tube problemas.

Entiendo que tenés razón, no puedo acceder a memoria que no me corresponde, pero la pregunta es: ¿Por qué cuando aumento el tamaño de buffer en el programa, se pruduce un error? En esta línea la condición se cumple:

Código C++:
Ver original
  1. if(nret == SOCKET_ERROR) {
  2.             cout << "Error: No se ha podido conectar con el Servidor" << endl;
  3.             break;
  4.         }

la condición if se cumple, osea que hay un error en el socket, problema al recibir datos, por esa razón ya no puedo ver por la consola lo que está pasando en el chat, por ejemplo si escriben o si alguien entra o sale de una sala/canal, además de que se detiene el bucle.

Pero ese error se produce apenas se abre la conexión, por lo que el bot entra al servidor y luego de un par de minutos, el bot cae, osea se cierra la conexión o se cerró antes, queda colgado el socket y tampoco puedo leer lo que sucede en el chat.

¿De qué manera puedo solucionarlo?
Trato de intentar solucionarlo pero no puedo, necesito un código que me ayude o el mío modificado para poder comprender porque ocurre eso inesperado, nunca debería darme error el programa por tan solo aumentar el tamaño del buffer, si eso es algo muy normal que no debería dar error en la lectura.

Gracias de antemano