Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#431
Si esque no has cambiado casi nada, solo un par de líneas. El resto, ha sido meter la función antigua (que estaba bien, salvo algunas correcciones) en la funcion Start. Sepáralas de nuevo, es bueno separar el código en funciones. Pero hayq eu distinguir bien qué es exactamente lo que va a hacer cada función.
Tu función receiveData lo que hacía era recibir los datos, bien, y cerrar el socket y pedir otro cliente y recibir sus datos y etc...
Eso no es una función con una utilidad clara.

Limítate a hacer, por ejemplo, esto:
Start: Bucle { aceptar cliente, trabajar los datos de ese cliente (llamando a receiveData }
ReceiveData: Enviar y recibir datos. Nada más (no llamas a Start ni llamas recursivamente a receiveData. Si quieres recibir más datos o esperar, si tal, harás un bucle


En fin, el resumen de esto es que los métodos deben tener una utilidad clara. Métodos que se llaman de forma circular (Start -> ReceiveData -> Start) pueden ser peligrosos, y en este caso en concreto, no es el momento de usarlo. Divide la función Start en pasos: Recibir cliente, manejar el cliente. Luego, si algún paso es grande (Manejar el cliente), lo mueves a un método privado. Luego, divide y analiza ese método privado.
#432
Hay varias cosas que deberías reestructurar.
Una de ellas es que creas el serverSocket desde fuera. Sería más correcto que lo creases, bindeases y lo pusieras a escuchar dentro del método Start, pasándole los parámetros. Pero bueno, esto es secundario actualmente.

El principal problema es el Start y el receiveData. ReceiveData es una función recursiva. ¿Por qué? Dentro del Start la llamas en bucle, para qué hacerla recursiva. Sería preferible cambiar la recursión por un bucle. Y bueno, no solo es recursiva sino que llama a Start. Este flujo pues... ¿Esperas que la función "receiveData" acepte a otros clientes? Si quieres que tras un cliente, espere a otro, entonces pon un bucle dentro de la función Start, por ejemplo.

Y luego, en la función Start, tienes un bucle que es "while(Available == 0)". Mientras que no haya datos, leemos datos. ¿Y qué ocurre si cuando llegamos a este punto ya hay datos?
#433
Cita de: RevolucionVegana en 25 Julio 2017, 00:46 AM
^^ que ocultas pillín  :xD :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:

En estos casos la carpeta con nombre "Ejercicios Mates" no falla. La App de la galería ya sabe de qué va el tema y no la muestra :X
#434
Umh bueno, acerca de eso...
Code::Blocks tiene un tipo de proyecto que es Dynamic Link Library, DLL vaya. Si seleccionas ese tipo de proyecto al crearlo, te lo hace automáticamente todo esto.
De todos modos, si va sa Propiedades del proyecto -> Build targets, verás que hay un selector, y una de sus opciones es "Dynamic library". En tu caso, por defecto estará puesto a "Console application", supongo. Si lo cambias ya debería estar, y ya no tendrías que poner el -shared (lo cierto es que esta opción mejor dejársela al IDE xD)

Y con respecto a si cambiándole la extension funcionará, no lo sé. Prueba jaja
#435
Todo está bien salvo que lo pusiste en compilador. El parámetro -shared es del linker. Tú quieres que ese parámetro aparezca en la segunda parte, donde el "g++.exe -o ...". Para ello, coloca ese parámetro en la pestaña "Linker settings".

Como explicación racional a todo esto:
Se puede compilar sin main un código. Generas el código de las funciones o datos que haya. El problema viene a la hora de linkear. Si quieres linkear los códigos objeto para generar un ejecutable, necesita un punto de entrada, el "main". Es por eso que da el error, al no encontrarlo. Claro que al pasarle el -shared, ya no es un ejecutable, sinó una DLL, que no lo necesita.
#436
Este tema es de hace 6 años -.-

La obtuviera o no, este señor no se conecta desde poco después de crear el tema, así que es muy dudoso que responda xD

Si quieres solventar tu problema y no encuentras información por el foro, es mejor que crees un tema.

(No se abren temas tan antiguos)
#437
C y H
Aunque bueno, más que charlar, me suelo pasar por algún tema candente de vez en cuando y ya :X
#438
Si te refieres a que se aplican a elemntos que no son, entonces los CSS están mal formados. Los selectores deben ser lo más estrictos posible. Si tuvieras por ejemplo una tabla con clase "calendario" que tenga celdas con clase "dia", no basta con poner ".dia { ... }". Tienes que poner, por ejemplo, ".calendario .dia { ... }".

Si tu problema es otro, no lo entendí. ¿Qué es lo que se mezcla exactamente?
#439
Puedes poner la ruta absoluta (por ejemplo, "C:/abc/xyz.txt")
#440
Programación C/C++ / Re: Cronometro c++
22 Julio 2017, 14:37 PM
Si quieres saber el tiempo que ha pasado entre un punto y otro d ela ejecución, tienes clock() de la librería <ctime>, que retorna (usualmente), milisegundos:

Código (cpp) [Seleccionar]
#include <ctime>

int main(){
    clock_t cl = clock(); // Milisegundos transcurridos hasta este momento

    // Pasa el tiempo...

    cout << (clock() - cl) << endl; // Tiempo ahora - tiempo anterior = tiempo transcurrido
}


Como detalle, clock no retorna milisegundos, sino ticks del reloj. En Windows suelen ser milisegundos, pero no tiene por qué. Para tenerlo seguro, tienes la constante "CLOCKS_PER_SEC".


Como detalle final, tienes la librería chrono de C++11, que es muy completa para medir tiempos. La más completa de C++ probablemente. Aquí tienes una buena referencia de ella: http://www.cplusplus.com/reference/chrono/