Warum nicht eine einfache socket auf localhost verbinden?

Ich bin nach einem tutorial, das lehrt mich, wie man win32 sockets(winsock2). Ich bin versucht, zu erstellen eine einfache socket-Verbindung zu "localhost" aber mein Programm ist zu Versagen, wenn ich versuche, eine Verbindung zum lokalen host(die Funktion connect()).

Brauche ich admin-Rechte, um die Verbindung zum localhost? Das ist vielleicht der Grund, warum es scheitert? Vielleicht theres ein problem mit meinem code? Ich habe versucht die ports 8888 & 8000 & Sie beide scheitern.

Auch wenn ich den port auf 80 & verbinden www.google.com ich kann mich verbinden ABER ich bekomme keine Antwort zurück. Ist das, weil ich noch nicht geschickt, eine HTTP-Anforderung oder-soll ich, um etwas zu bekommen-Antwort zurück?

Hier mein code (mit den includes entfernt):

//Constants & Globals //
typedef unsigned long IPNumber;    //IP number typedef for IPv4
const int SOCK_VER    = 2;
const int SERVER_PORT = 8888;  //8888
SOCKET mSocket        = INVALID_SOCKET;
SOCKADDR_IN sockAddr  = {0};
WSADATA wsaData;
HOSTENT* hostent;


int _tmain(int argc, _TCHAR* argv[])
{
    //Initialise winsock version 2.2
    if (WSAStartup(MAKEWORD(SOCK_VER,2), &wsaData) != 0)
    {
        printf("Failed to initialise winsock\n");
        WSACleanup();
        system("PAUSE");
        return 0;
    }

    if (LOBYTE(wsaData.wVersion) != SOCK_VER || HIBYTE(wsaData.wVersion) != 2)
    {
        printf("Failed to load the correct winsock version\n");
        WSACleanup();
        system("PAUSE");
        return 0;
    }

    //Create socket
    mSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (mSocket == INVALID_SOCKET)
    {
        printf("Failed to create TCP socket\n");
        WSACleanup();
        system("PAUSE");
        return 0;
    }


    //Get IP Address of website by the domain name, we do this by contacting(??) the Domain Name Server
    if ((hostent = gethostbyname("localhost")) == NULL)  //"localhost"  www.google.com
    {
        printf("Failed to resolve website name to an ip address\n");
        WSACleanup();
        system("PAUSE");
        return 0;
    }

    sockAddr.sin_port             = htons(SERVER_PORT);
    sockAddr.sin_family           = AF_INET;
    sockAddr.sin_addr.S_un.S_addr = (*reinterpret_cast <IPNumber*> (hostent->h_addr_list[0]));
    //sockAddr.sin_addr.s_addr=*((unsigned long*)hostent->h_addr);  //Can also do this

    //ERROR OCCURS ON NEXT LINE: Connect to server
    if (connect(mSocket, (SOCKADDR*)(&sockAddr), sizeof(sockAddr)) != 0)
    {
        printf("Failed to connect to server\n");
        WSACleanup();
        system("PAUSE");
        return 0;
    }

    printf("Got to here\r\n");
    //Display message from server
    char buffer[1000];
    memset(buffer,0,999);
    int inDataLength=recv(mSocket,buffer,1000,0);
    printf("Response: %s\r\n", buffer);

    //Shutdown our socket
    shutdown(mSocket, SD_SEND);

    //Close our socket entirely
    closesocket(mSocket);

    //Cleanup Winsock
    WSACleanup();

    system("pause");
    return 0;
}
Hast du noch was lauscht auf diesem port auf Ihrem Rechner? (Und ja, Sie brauchen, um das senden einer HTTP-Anfrage, wenn Sie möchten, einen webserver zu senden, die Sie Sachen.)
Nein, ich habe nichts zu hören, ich kindof dachte, dass der lokale host würde nur reagieren, lol
bitte informieren Sie uns, wenn localhost "nur reagiert", so wir es nennen können, Skynet, und rufen Sie den Terminator. Halten Sie Ihren computer entfernt von den Großen Roten Knopf.
Es reagieren wird, wenn Sie eine Verbindung zu einem port mit einem Dienst hören, und das verwendete Protokoll nicht verlangen, dass Sie reden zuerst. Zum Beispiel, wenn ich Schreibe in meinem linux-Rechner: telnet localhost 22 (das ist der SSH-port) wird es Antworten SSH-2.0-OpenSSH_5.8p1 Debian-7ubuntu1 ohne Verzögerung.
Es hat "nur reagieren". Mit einem "port unreachable" ICMP-Paket, sagen Sie, dass es keine socket lauscht auf diesem port. Die die sockets-Bibliothek umgewandelt, um einen Fehler return-code von connect.

InformationsquelleAutor sazr | 2011-11-26

Schreibe einen Kommentar