Problem mit Endlosschleife in Server [gelöst]
-
HAT SICH ERLEDIGT.
-
Warum connect()? Ein Server connected nicht! Er wartet (listen) und akzeptiert neue Verbindungen (accept), die er über einen Port bekommt (bind) innerhalb einer Endlosschleife.
-
Ad aCTa schrieb:
Warum connect()? Ein Server connected nicht! Er wartet (listen) und akzeptiert neue Verbindungen (accept), die er über einen Port bekommt (bind) innerhalb einer Endlosschleife.
Ich seh' grad auch... Danke!
Dummer Fehler...
-
Ich versuche das gerade als Klasse zu implementieren. (Dass dieser Code zu einem großen Teil aus C-Code besteht, wird noch geändert). Wieso geht das Fenster sofort wieder zu? Die Endlosschleife scheint nicht zu funktionieren...
HEADER:
#ifndef _SERVER_ #define _SERVER_ #include <iostream> #include <string> #include <winsock.h> using namespace std; class Server { private: SOCKET s, c; int addr_len; struct sockaddr_in addr; public: Server() {}; //Konstrukor ~Server(){}; // Destruktor int SocketStart(); }; //SEMIKOLON NICHT VERGESSEN!!! int Server::SocketStart() { WSADATA wsa; if (WSAStartup(MAKEWORD(1, 1), &wsa)) { printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError()); return EXIT_FAILURE; } return 0; //SOCKET ANLEGEN s = socket(PF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket() failed"); return 1; } //CONNECTEN addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(7000); addr.sin_family = AF_INET; //BINDEN if (bind(s, (struct sockaddr*) &addr, sizeof(addr)) == -1) { perror("bind() failed"); return 2; } //ZUHÖREN if (listen(s, 3) == -1) { perror("listen () failed"); return 3; } //WARTEN for(;;) { addr_len = sizeof(addr); c = accept(s, (struct sockaddr*)&addr, &addr_len); if (c == -1) { perror("accept() failed"); continue; } printf("Client from %s\n", inet_ntoa(addr.sin_addr)); closesocket(c); } closesocket(s); } #endif _SERVER_CPP Datei:
#include "Klasse.h" #define BUF_SIZ 4096 int main() { Server a; a.SocketStart(); char buffer[BUF_SIZ]; return 0; }