Zmienna, która nie przyjmuje wartości

Odpowiedz Nowy wątek
2011-05-25 14:45

Rejestracja: 11 lat temu

Ostatnio: 7 lat temu

0

Witam,
Piszę aplikację klient/serwer opartą o protokół TCP/IP. Chciałem, żeby mogło połączyć się do serwera wiele klientów. Wszystko działa, ale jest mały problem - nie mogę ustalić nazwy tego kto wysyła wiadomość. Domyślnie ma to robić specjalna komenda "/cmd:name[TWOJE-IMIE]". Serwer otrzymuje tą komendę, wykonuje przypisane jej czynności, ale potem nie może przypisać imienia do zmiennej przechowującej je.

Fragment kodu za to odpowiedzialny:


bool CServer::CheckForCmds(char* txt, SClient* k)
{
    if (txt[0] == '/') 
    {
        if (strncmp(txt, "/cmd:name[", 9) == 0) 
        {
            unsigned int len = strlen(txt) - 11;
            if (len > 4) 
            {
                char* c = &txt[10];
                std::ostringstream ss;
                for (unsigned int i = 0; i < len; i++) ss << c[i];
                k->name = ss.str();
                std::cout << "\n>> New name for " << k->sip[0] << "." << k->sip[1] << "." 
                                              << k->sip[2] << "." << k->sip[3] << ": " << k->name;
                if (bLog == true) logFile << "\n>> New name for " << k->sip[0] << "." 
                                                                 << k->sip[1] << "." << k->sip[2] << "." 
                                                                 << k->sip[3] << ": " << k->name;
            }else
            {   
                if (bLog == true) logFile << "![" << k->sip[0] << "." << k->sip[1] << "." << k->sip[2] << "." 
                                                                 << k->sip[3] << "]: " << txt; 
            }
        }
        return (true);
    }else return (false);
}

A tu zapisany do pliku zapis działania programu:


sdl-net test server
ver: May 23 2011

LOG STARTED! Start time: Mon May 23 18:45:53 2011

Loaded settings from 'settings.ini'!
TCP opened on port 7555
listening...
new client connected from 127.0.0.1
Reading data from clients started
New name for 127.0.0.1: Robin92
[]: hej
[]: /cmd:exit
Reading data from clients terminated on demand
Listening stopped on demand
Sockets closed, users deleted

LOG STOPPED! Stop date: Mon May 23 18:46:06 2011

edytowany 1x, ostatnio: robin3d, 2011-05-25 14:47

Pozostało 580 znaków

2011-05-25 15:42

Rejestracja: 14 lat temu

Ostatnio: 11 godzin temu

0

Fragment:
char* c = &txt[10];
std::ostringstream ss;
for (unsigned int i = 0; i < len; i++) ss << c[i];
k->name = ss.str();
można zapisać:
k->name=std::string(txt+10,len);
Możliwe że jak zamienisz na to błąd zniknie (nadgorliwy optymalizator). Ale nie liczył bym na to, szukaj w innym miejscu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2011-05-25 15:45

Rejestracja: 11 lat temu

Ostatnio: 7 lat temu

0

Zmieniłem i dalej nie działa. Hmm, a może zrobić drugi kontener, ale tylko stringów, w którym będę przechowywał imiona dla poszczególnych klientów (klient i = imie i), itp?

Pozostało 580 znaków

2011-05-25 15:54

Rejestracja: 14 lat temu

Ostatnio: 11 godzin temu

0

Jak masz wpisane przez konstruktor to na pewno masz ten nick. Szukaj błędu w innym miejscu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0