winsock odbieranie pakietow
Ostatnio zmodyfikowano 2012-04-11 10:41
hincu Temat założony przez niniejszego użytkownika |
winsock odbieranie pakietow » 2012-04-10 19:05:26 siema wzialem sie za pisanie protokolu i pojwail sie problem przy odbiorze pakietow :/ tak to wyglada http://pokazywarka.pl/waqzk5/std::string Packet::PacketBuilder( PacketFamily & family, PacketAction & action, std::string & data ) { std::string temp; std::string tempp; temp.clear(); tempp.clear(); temp = GetFamilyName(); temp += "_"; temp += this->GetActionName(); temp += "_"; temp += data; Size = sizeof( temp ); tempp = Size; tempp += "_0"; tempp += temp; Data = tempp; return tempp; }
void Server::SendPacket() { send( cClient.sClient, sPacket.PacketBuilder( sPacket.FamilyID, sPacket.ActionID, sPacket.Data ).c_str(), sPacket.GetSize(), 0 ); std::cout << "SEND: " << sPacket.PacketBuilder( sPacket.FamilyID, sPacket.ActionID, sPacket.Data ).c_str() << std::endl; }
void Server::Ping() { if( PingTimer.GetElapsedTime() >= 5.0f ) { PacketFamily family = PING; PacketAction action = REQUEST; sPacket.SetFamilyID( family ); sPacket.SetActionID( action ); SendPacket(); PingTimer.Reset(); } }
void Client::Recv() { std::string temp; recv( ServerSocket, rBuffer, 1, 0 ); sBuffer += rBuffer; std::cout << "RECV: " << sBuffer.c_str() << std::endl; }
zwracam to w ten sposob i dostaje tylko to co na screenach : / co moge robic zle? |
|
Admixior |
» 2012-04-10 21:14:56 Mam pytanie. Co zwraca funkcja Packet::GetSize() ? Jakbyś mógł napisać dokładnie jakie wyrażenie, co stoi przy return. //edit: nie podoba mi się wyrażenie std::string temp; Size = sizeof( temp ); Czy nie powinno być Size = temp.size(); |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-04-10 21:28:14 zwraca int, rozmiar wysylanego pakietu |
|
Admixior |
» 2012-04-10 22:30:18 hmm.. Tyle się domyśliłem. Chodziło mi bardziej jaka to jest zmienna i czy na pewno jest prawidłowy rozmiar paczki(w jaki sposób go liczysz). W funkcji PacketBuilder masz przypisanie Size = sizeof( temp ); Czyli przypisujesz ->stały rozmiar klasy string( w moim kompilatorze jest to 32 bajty). Nie rozumiem w jakim celu. Nie lepiej by było gdybyś przypisał rozmiar samego tekstu który dodajesz w linijce tempp += temp; . Wykonując poniższe operacje w moim przypadku zakładając że zmienna size jest typu int to w tempp znajduje się jeden bajt (ostatni ze zmiennej size) który ma wartość 32. Size = sizeof( temp ); tempp = Size; To samo co by się zrobiło taką operację tempp = '\x32'; . I jeszcze kilka pytań, gdzie jest deklaracja i jaki typ ma zmienna "Data" (od dużej litery) w pierwszej funkcji, rBuffer w ostatniej funkcji, oraz mógłbyś napisać linijkę która zwraca wartość w funkcjis Packet.GetSize(), czy jest to return Data.size();, czy return Size; ,czy co innego. |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-04-11 07:20:00 Data to string a getsize zwraca Data.size(); : P wiem troche chaotycznie ale co zrobic jak nic nie zrobic XD |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-04-11 10:41:39 problem rozwiazany, teraz musze pomyslec jak szybko odbierac pakiety w real time zeby nie bylo lagow : P |
|
« 1 » |