Autor Wątek: Proste sieciowe rpg. Problem z odbieraniem wiadomosci  (Przeczytany 1785 razy)

Offline idyzer

  • Użytkownik

# Październik 17, 2014, 11:20:44
Witam, od jakiegoś czasu piszę sobie sieciowego rpg'a. Problem mam następujący i opiszę go w punktach, będzie przejrzyście.
1. W menu wybieram "2" i przechodzę do tworzenia postaci.
2. Podaje imię, serwer sprawdza czy taka postać już jest, jeśli nie, to tworzy plik z nazwą postaci.
3. Znajdujemy się menu. Chcę znowu stworzyć bohatera więc daje "2". wpisuje nowe imię bohatera, serwer tworzy go i odsyła odpowiednia wiadomość klientowi, czy taka postać już jest czy nie. U mnie jest to "*" jeśli jest, a jak nie ma to "**". I tu jest ten problem. Za pierwszym razem klient odebrał "**" czyli utworzono nowego bohatera, za drugim razem zamiast odebrać "**" odbiera imię bohatera którego wprowadzałem jako pierwszego... jest to dziwna sytuacja dla mnie i nie wiem gdzie jest błąd ; /
SERWER:
while(1){

        if(GAME_STATUS == 0){
            memset(inputBuffer, 0, 64);
            recv(context->clSocket, inputBuffer, 64, 0);
            cout << "Komenda: " << inputBuffer << endl;
            command = inputBuffer;// LOGGING

            if(command == "1"){
                memset(inputBuffer, 0, 64);
                recv(context->clSocket, inputBuffer, 64, 0);
                characterName = inputBuffer;
                memset(inputBuffer, 0, 64);
                recv(context->clSocket, inputBuffer, 64, 0);
                password = inputBuffer;
                cout << "Gracz : " << characterName << " zalogowany :" << password;
            }else if(command == "2"){              // NEW CHARACTER
                STATUS = true;
                while(STATUS){
                    char tab[64];
                    memset(tab, 0, 64);
                    memset(inputBuffer, 0, 64);
                    recv(context->clSocket, inputBuffer, 64, 0);
                    characterName = inputBuffer;
                    ifstream file;
                    string path;
                    path = "characters\\" + characterName;
                    cout << path << endl;
                    file.open(path.c_str());
                    if(file.is_open()){
                        testMessage1();
                        file.close();
                        memset(tab, '*', 1);
             
                    }else{
                        STATUS = false;
                        testMessage2();
                        ofstream characterFile;
                        characterFile.open(path.c_str());
                        memset(tab, '*', 2);

                        characterFile.close();
                    }
                    cout << "\nwysylam" << tab;
                    send(context->clSocket,tab ,64 ,0);
                }
   


 KLIENT:

while(1){
        if(GAME_STATUS == 0){
            system("cls");
            cout << "jestem w MENU\n" << "recvBuff: " << recvBuff;
            loginScreen();
            memset(sendBuff, 0, 64);
            cin >> sendBuff;
            command = sendBuff;

            if(send(clientSocket, sendBuff, 64, 0) < 0){
                    cout << "Blad wysylania komendy\n";
                }

            if(command == "1"){                     // LOGING

                memset(sendBuff,0,64);
                cin >> sendBuff;
                command = sendBuff;

                if(send(clientSocket, sendBuff, 64, 0) < 0){
                    cout << "Blad wysylania komendy\n";
                }

                memset(sendBuff,0,64);
                cin >> sendBuff;
                command = sendBuff;

                if(send(clientSocket, sendBuff, 64, 0) < 0){
                    cout << "Blad wysylania komendy\n";
                }
            } else if(command == "2"){              // NEW CHARACTER
                STATUS = true;
                cout << "jestem w NOWA POSTAC\n";
                while(STATUS){
                    system("cls");
                    cout << "recvBuff: " << recvBuff;
                    cout << "Podaj imie bohatera: ";
                    memset(characterName, 0, 64);
                    cin >> characterName;
                    if(send(clientSocket, characterName, 64, 0) < 0){
                        cout << "Blad wysylania komendy\n";
                    }

                    recv(clientSocket, recvBuff, 64, 0);
                    recvBuffString = recvBuff;
                    memset(recvBuff, 0, 64);
                    system("pause");
                    if(recvBuffString == "**"){
                        testMessage2();
                        cout << recvBuffString << endl;
                        system("pause");
                        STATUS = false;
                    }else{
                        system("cls");
                        testMessage1();
                        cout << recvBuffString << endl;
                        cout << "Taka postac juz istnieje!\n\n";
                        system("pause");
                    }
                }
   

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline skmskm

  • Użytkownik

# Październik 17, 2014, 22:02:17
nie wysyłasz za każdym razem tej samej nazwy postaci?

Offline Liosan

  • Redaktor

# Październik 17, 2014, 23:06:57
A serwer co odebrał za drugim razem? W logu serwera jest dwa razy pierwsza nazwa, czy obie? Jakie pliki postaci się tworzą?

Liosan

Offline idyzer

  • Użytkownik

# Październik 22, 2014, 09:11:05
nie wysyłasz za każdym razem tej samej nazwy postaci?

Za każdym razem wysyłam inną nazwę, pokazują to logi i serwer tworzy pliki dla nowych bohaterów.

A serwer co odebrał za drugim razem? W logu serwera jest dwa razy pierwsza nazwa, czy obie? Jakie pliki postaci się tworzą?

Liosan

Liosan, serwer zawsze dobrze odbiera, w logu serwera są obie nazwy. Pliki jakie tworzy serwer to plik z nazwa postaci bez rozszerzenia.

Przepraszam, że teraz dopiero odpisuje ale nie miałem czasu.
Pozdro.