//Envía un paquete tipo datagrama desde este socket int SocketDatagrama::envia(PaqueteDatagrama & p) { direccionForanea.sin_family = AF_INET; direccionForanea.sin_addr.s_addr = inet_addr(p.obtieneDireccion()); direccionForanea.sin_port = htons(p.obtienePuerto()); sendto(s, (char *)p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *) &direccionForanea, sizeof(direccionForanea)); }
int SocketDatagrama::recibe(PaqueteDatagrama & p) { unsigned int addr_len = sizeof(direccionForanea); bzero((char *)&direccionForanea, sizeof(direccionForanea)); int regreso = (int)recvfrom(s,p.obtieneDatos(),p.obtieneLongitud(), 0, (struct sockaddr *) &direccionForanea, &addr_len); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); //std::cout << "Mensaje recibido de: " << inet_ntoa(direccionForanea.sin_addr) << ":" << ntohs(direccionForanea.sin_port) << std::endl; return regreso; }
// Recibe un paquete tipo datagrama proveniente de este socket int SocketDatagrama::recibe(PaqueteDatagrama &p) { int retorno; socklen_t clilen; // Ojo no compila si es un tipo int en C clilen = sizeof(direccionForanea); retorno = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); return retorno; }
int SocketDatagrama::envia(PaqueteDatagrama & p) { int status; //char *datos = p.obtieneDatos(); direccionForanea.sin_family = AF_INET; direccionForanea.sin_addr.s_addr = inet_addr((char *)p.obtieneDireccion()); direccionForanea.sin_port = htons(p.obtienePuerto()); status = sendto(s, p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *) &direccionForanea, sizeof(direccionForanea)); //cout << (char*) p.obtieneDatos() << endl; return status; }
int SocketDatagrama::recibe(PaqueteDatagrama &p, int size) { //char *datos = new char[p.obtieneLongitud()]; socklen_t clilen = sizeof(direccionForanea); int status = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(),0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); //cout << "Recibiendo de " << inet_ntoa(direccionForanea.sin_addr) << " en el puerto : " <<ntohs(direccionForanea.sin_port)<<endl; //cout << &res << endl; //printf("%d",res); return status; }
// Recibe un paquete tipo datagrama proveniente de este socket int SocketDatagrama::recibeTimeOut(PaqueteDatagrama &p) { int retorno; socklen_t clilen; // Ojo no compila si es un tipo int en C clilen = sizeof(direccionForanea); retorno = recvfrom(s, (char *)p.obtieneDatos(), p.obtieneLongitud(), 0, (struct sockaddr *)&direccionForanea, &clilen); p.inicializaPuerto(ntohs(direccionForanea.sin_port)); p.inicializaIp(inet_ntoa(direccionForanea.sin_addr)); if (retorno < 0) { if (errno == EWOULDBLOCK) fprintf(stderr, "Tiempo para recepción transcurrido\n"); else fprintf(stderr, "Error en recvfrom\n"); } return retorno; }