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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
netstat -a
nur Listen mit sockets und socket.Weder
connect
nochlisten
genannt wurde, auf Ihrem sockel, so fällt es außerhalb der Zuständigkeit desnetstat -a
.Da Windows 10 verwenden, können Sie
netstat -q
." -q Displays all connections, listening ports, and bound"
Dies zeigt diese unvollständige sockets mit dem Wort "GEBUNDEN" in der Spalte Status-q
flag scheint nicht zu funktionieren in Verbindung mit der-b
(zeigt binary/exe-name), aber es hat funktioniert mit-o
(zeigt Besitz pid), die ist gut genug. (oder zumindest ist dies meine Erfahrung auf Win10 1903)