Warum ist mein socket ist offen port nicht aufgeführt ist, indem Sie den Befehl netstat?

Wenn Sie dieses Beispiel ausführen, sehen Sie den Hafen nie aufgeführt netstat. Warum? Und wie kann ich es so machen?

#include <WinSock.h>
#include <io.h>
#include <stdio.h>

#pragma comment(lib, "WS2_32")

int main() {
    WORD wVers = MAKEWORD(2, 2);
    WSADATA wsa;
    WSAStartup(wVers, &wsa);
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 6);
    if (sock != INVALID_SOCKET) {
        struct sockaddr_in addr = { 0 };
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
        int addrlen = sizeof(addr);
        bind(sock, (struct sockaddr *)&addr, addrlen);
        if (getsockname(sock, (struct sockaddr *)&addr, &addrlen) == 0) {
            fprintf(stdout, "HANDLE = %d, port = %d\n", sock, addr.sin_port);
            fflush(stdout);
            system("netstat -a -n");
        }
        closesocket(sock);
    }
    WSACleanup();
}
  • Haben Sie überprüft, dass bind() erfolgreich ? Was ist, wenn Sie auch listen() aufgerufen, nachdem bind() ?
  • Ja, es gelingt, sonst getsockname hätte nicht einen port zurück. Aber ich bin mir nicht sicher, warum hören notwendig ist. Der Anschluss ist bereits zugewiesen zu mir, richtig?
  • bind hat in der Tat reserve, dem Hafen und dann gibt es, zumindest unter Linux.
  • Ich glaube, netstat zeigt nur Zuhören (oder verbunden) sockets. Während Ihr sockel ist erstellt und den port zugewiesen, es ist noch nicht die überwachung von verbindungen.
  • kennen Sie ein Weg, um zu überprüfen, welche ports sind in Verwendung?
  • Die beste und tatsächlich die einzige zuverlässige Weg, um zu sehen, ob etwas verfügbar ist, um zu versuchen, es zu benutzen.
  • sorry, ich meinte über die Kommandozeile. Wie netstat. Nicht durch das schreiben von code.
  • huh, netstat wurden durch schreiben von code.
  • Beachten Sie, dass es ein Fehler in Ihrem code, die port-Nummer im Netzwerk-endian, so sollte man fprintf(stdout, "HANDLE = %d, port = %d\n", sock, ntohs(addr.sin_port)); - noch netstat ist nicht zu zeigen, bis zu verbinden oder zu hören ist, genannt.
  • Ich meine, für einen user, kein Programmierer. Sie verstehen, was ich verlange.
  • whoa, wirklich?? Ich habe um dies zu überprüfen, aber das würde möglicherweise erklären, eine Menge, danke!
  • Windows manchmal Listen-sockets geöffnet von Anwendungen unter "svchost.exe" oder einfach nur ein system-Prozess.
  • hier nicht der Fall
  • Re "Sie verstehen, was ich Frage," ich tun. Ich bin nicht darauf hindeutet, Sie haben jeden Ihrer Nutzer ein Programm zu schreiben; ich bin darauf hindeutet, Sie könnte verwenden Sie ein Programm, das Sie schrieb nur, wie Sie mithilfe einer Microsoft schrieb (oder portiert).
  • So gibt es keine integrierte Möglichkeit? Das ist alles, was ich verlange.
  • Gerade überprüft 🙂 vielen Dank für das lassen mich wissen!

InformationsquelleAutor Mehrdad | 2016-11-29
Schreibe einen Kommentar