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;
    }
    

Anmelden zum Antworten