Tengo un problema con los socket cuando envió y recibo, esto es porque tengo punteros en la clase que estoy enviando, entonces al recibirla me da error de:
Segmentation fault;
esta es la situación que tengo:
Clase a enviar:
#define TAMANO_MENSAJE 50
class Mensaje {
private:
//char mensaje[TAMANO_MENSAJE];
string mensaje;
public:
Mensaje();
Mensaje(char);
string getMensaje(){return mensaje;}
};
Esta es la función que envía:
int Sender::SendMensaje(Mensaje &pMensaje){
return send(this->host->getSocket(), &pMensaje , sizeof(pMensaje) ,0);
}
Esta es la función que recibe:
Mensaje Receiver::RecvMensaje(){
Mensaje rm;
recv(host->getSocket(), &rm, sizeof(rm), 0);
return rm;
}
El problema esta en el string, ya que es un puntero, puedo enviar el tamaño exacto del paquete del lado del cliente, pero cuando tengo que recibirlo no se de que tamaño es el paquete, si alguien me puede ayudar!!!
y el tamaño del paquete que recibes es el mismo de la clase supongo ,si recibes paquetes incompletos capaz que te puede ayudar el MSG_WAITALL que es una señalizacion de recv q se utiliza para que no devuelva el mensaje hasta que el buffer suministrado este completo..
recv(host->getSocket(), &rm, sizeof(rm), MSG_WAITALL);
si no es esto, no entendi bien .
pero ...
no estas enviando la cantidad de bytes que ocupa un objeto de la clase mensaje??? , y no estas recibiendo la cantidad de bytes que ocupa un objeto de esa misma clase?? suponiendo que las clases son iguales para los 2 programas