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 2011LOG STARTED! Start time: Mon May 23 1853 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 deletedLOG STOPPED! Stop date: Mon May 23 1806 2011