Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

idontknow

unregistriert

11

30.01.2011, 21:36

Naja du wirst logischerweise irgendwo (bzw in send!) eine while-Schleife haben müssen, das ist so schon richtig!

Genauer: Du hast eine Schleife die solange send aufruft bis das mal fehlschlägt (return Wert <= 0).

12

31.01.2011, 16:38

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
unsigned int WINAPI send(VOID* data)
{
    CChat chat;
    CCreateServer serv;

    while(serv.GetBuf() != 0)
    {
        std::cout << "Server: ";
        std::cin.getline(serv.GetBuf(),sizeof(serv.GetBuf()));
        send(serv.getServerSocket(),serv.GetBuf(),256,0);
    
        if(serv.GetBuf()[0] == '*' && serv.GetBuf()[1] == '*' && serv.GetBuf()[2] == '*')
        {
            serv.go = false;
        }
        if(serv.GetBuf()[0] == '*' && serv.GetBuf()[1] == 'h' && serv.GetBuf()[2] == 'm' && serv.GetBuf()[3] == '*')
        {
            serv.go = false;
            system("cls");
            closesocket(serv.getServerSocket());
            WSACleanup();
            chat.ShowMainMenu();
        }
    }

    return 0;
}

Das ist die Funktion "send". Aber sobald ich den Thread starte beendet sich das Programm sofort weil es auf das return 0 am Ende der Funktion trifft Oo. Warum wird die whileschleife in "send" einfach ignoriert?
Hier noch der Code von CreateServer

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
HRESULT CCreateServer::CreateServer()
{
    CChat chat;
    error=chat.InitWinsock();
    if(error != 0)
    {
        std::cout << "Fehler beim starten von Winsock!" << std::endl << "Chat wird beendet" << std::endl;
        std::cin.get();
        return 1;
    }
    createdSocket = socket(AF_INET,SOCK_STREAM,0);
    if(createdSocket == INVALID_SOCKET)
    {
        std::cout << "Der Socket konnte nicht erstellt werden!" << std::endl;
        std::cin.ignore();
        std::cin.get();
        WSACleanup();
        return 1;
    }
    
    else
    {
        std::cout << "Socket wurde erstellt!" << std::endl;
    }

    memset(&addr,0,sizeof(SOCKADDR_IN));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(20);
    addr.sin_addr.s_addr=ADDR_ANY;

    error = bind(createdSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    if(error == SOCKET_ERROR)
    {
        std::cout << "Fehler beim binden an Port 20" << std::endl;
        std::cin.ignore();
        std::cin.get();
        closesocket(createdSocket);
        WSACleanup();
        return 1;
    }

    else 
    {
        std::cout << "Socket an Port 20 gebunden!" << std::endl;
    }
    error = listen(createdSocket,100);

    if(error == SOCKET_ERROR)
    {
        std::cout << "Fehler beim warten auf Client!" << std::endl;
        std::cin.ignore();
        std::cin.get();
        closesocket(createdSocket);
        WSACleanup();
        return 1;
    }

    else
    {
        std::cout << "Warten auf Client..." << std::endl;
    }

    connectedSocket = accept(createdSocket,NULL,NULL);
    if(connectedSocket == INVALID_SOCKET)
    {
        std::cout << "Fehler beim Verbinden mit dem Client!" << std::endl;
        std::cin.ignore();
        std::cin.get();
        closesocket(createdSocket);
        WSACleanup();
        return 1;
    }
    else
    {
        std::cout << "Verbunden mit dem Client!" << std::endl;
    }

    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    system("cls");

    HANDLE Send;
    unsigned int dwthread;

    Send = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0,send,(LPVOID)1,0,&dwthread));

    return 0;
}
Metal ist keine Musik sondern eine Religion.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

31.01.2011, 16:47

Da bleibt ja nur eine Schlussfolgerung:

serv.GetBuf() == 0

Ich finde die Benennungen übrigens auch nicht so gelungen... eine Klasse namens "CCreateServer" mit einer Methode namens "CreateServer". Hab mich da gerade ziemlich dran verfranzt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (31.01.2011, 16:54)


14

31.01.2011, 19:10

Irgendwie nicht´:/ denn wenn ich z.B while(1) (War Test, ich weiß das man das nicht machen soll) eingebe wird das Fenster auch sofort geschlosse :? Also wird die Schleife praktisch gar nicht ausgeführt ?
Metal ist keine Musik sondern eine Religion.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

31.01.2011, 19:39

Äh... Das Fenster schließt sich? Kann es sein, dass der Haupt-Thread einfach bis zum Ende durch läuft? Dann wäre das natürlich zu erwarten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige