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ú

Temas - Chains

#1
Estoy intentando definir una clase para poder acceder a sus funciones desde otras clases. La clase debería ser estática, es decir, no debe ser instanciada.

Éste es el código de la cabecera (ServerClass.h)

Código (cpp) [Seleccionar]
#define DEFAULT_BUFLEN 512
#ifndef __SERVERCLASS_H__
#define __SERVERCLASS_H__

class ServerClass
{
public:
    static int CreateServer(HWND);
    static int CloseServer();
    char* getcbuffer();
    int listensock();
private:
    SOCKET ListenSocket;
    SOCKET ClientSocket;
    char recvbufx[DEFAULT_BUFLEN];
    int recvbuflen;
};
#endif


El problema es que al compilar, me da dos errores algo extraños en las líneas 6 y 17:

En linea 6: error: an anonymous struct cannot have function members
En linea 17: error: abstract declaratos '<anonymous class>' used as declaration


¿Por qué me detecta la clase como una estructura, si le he añadido la palabra 'class'? Es un proyecto en Code::Blocks para Windows, usando el compilador GNU GCC, y el proyecto es en C++, no en C.
#2
Buenos días. Estoy tratando de crear un pequeño programa cliente-servidor usando C++. He de admitir que soy un poco nuevo en esto de C++ y sobre todo en el uso de sockets (soy programador de C#).

Bien, la cuestión es que mi programa produce un error de violación de acceso (0xC0000005) al ejecutar una de sus lineas. Éste es el programa en cuestión (Es el cliente):

SOCKET client;
struct hostent * host;
char* hostname;

int main()
{
    hostname = new char[1024];
    client = socket( AF_INET, SOCK_STREAM, 0 );
    printf("Please enter the IP or name of the host to join> ");
    fflush( stdout );
    scanf("%s", hostname);
    printf("\n\nAttempting connection with host %s", hostname);
    host = gethostbyname( hostname );
    struct sockaddr_in sin;

    memset( &sin, 0, sizeof sin );

    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
    sin.sin_port = htons( 21 );
    if ( connect( client, (PSOCKADDR)&sin, sizeof sin ) == SOCKET_ERROR )
    {
    printf("Error 01: Could not connect to the defined host: %s.", hostname);
    return FALSE;
    }
    closesocket( client );
    return 0;
}


El error en cuestión me lo produce al ejecutar la siguiente línea:

sin.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;

Y no sé que hacer para solucionarlo, pues apenas hay documentación en internet acerca del uso de sockets en C++. Les agradecería que me guiaran un poco en mi tarea. Muchas gracias.