skovv Temat założony przez niniejszego użytkownika |
[WinSock]Przesył wiadomości » 2013-08-25 19:46:00 Witajcie ponownie :]
Chciałbym dziś się poradzić w jednej ważnej sprawie: jak napisać dobry przesył danych na winsocku? Aktualnie robię to tak: Tworzę sobie vector<string> z wiadomościami do wysłania. Wysyłam do servera( send(...) ) liczbę elementów vectora, następnie wysyłam po kolei wszystkie stringi( za każdym razem osobny send(...) ). W serverze( który ma odbierać te wiadomości ) odbieram( int b = recv(...) ) wiadomości od clienta. Jeśli coś przyszło( b > 0 ) to przerabiam string z liczbą elementów na int, odpalam pętle for i wykonuję ją tyle razy, ile jest elementów. W pętli mam odbieranie( recv ) od clienta i zapis do vector<string>. Nie jest to chyba za ciekawy sposób.. Może mi ktoś doradzić, jak powinno to wyglądać? Zależy mi na tym, by wysyłać kilka osobnych stringów jednoczeście, jeden po drugiem i aby server je tak odbierał, po kolei.
Pozdrawiam, Skovv |
|
skovv Temat założony przez niniejszego użytkownika |
» 2013-08-25 20:54:08 Zrobiłem to, czego zbytnio mi się nie chciało: wysyłam wszystkie w jednym, spakowanym stringu w jedneej wiadomości. Server odbiera, odpakowuje i cacy. Pakowany string wyglada tak: "rozmiaryelementow=wartośćelementów" :] Czy to dobra metoda? |
|
kubawal |
» 2013-08-26 10:24:09 |
|
RazzorFlame |
» 2013-08-26 12:00:51 Napisz pakiety. Jeśli nie wiesz jak to popatrz do źródeł SFML - sf::Packet. |
|
DejaVu |
» 2013-08-26 14:56:58 Rozwiązania zastosowane w bibliotece SFML mogą być interesujące, w szczególności wspomniany już sf::Packet. Trudno stwierdzić, co jest dobrym rozwiązaniem nie wiedząc co ma robić aplikacja docelowa. |
|
skovv Temat założony przez niniejszego użytkownika |
» 2013-08-27 23:22:01 Aplikacja docelowa jest nieznana :] Piszę sobie mini silniczek do (zapewne) gier. Pakiet który wysyłam wygląda tak: 13,2,5=aaaaaaaaaaaaabbccccc Rozmiary oddzielone przecinkiem, znak równości oznacza że to już wszystkie dane i zaczyna wczytywać ;) Wszystko zostaje pakowane do vectora i elegancko się to odczytuje :] Wygląda to tak: Net.Message.Add( "ERROR" ); Net.Message.Add( "Jesteś aresztowana! Ręce do góry!" ); Net.Message.Send( Server );
int b = Net.Message.Receive( Client ); if( b > 0 ) { string C = Net.Message.Get( 0 ); if( C == "ERROR" ) { MessageBox( NULL,( char * ) Net.Message.Get( 1 ).c_str(), "Wtf, Error!", MB_ICONSTOP | MB_OK ); } }
|
|
pekfos |
» 2013-08-28 14:25:00 Możesz zaprojektować własny protokół. Przykładowo na początku pakietu byłby nagłówek z wersją protokołu, jakieś flagi, długość i typ pakietu i ilość przesyłanych w nim elementów, itp. Po nagłówku pakietu znajdowałby się blok danych z przesyłanymi elementami. Każdy element w pakiecie zaczynałby się od opisu w postaci małego nagłówka, zawierającego długość elementu, jego typ i może coś jeszcze. Oczywiście, wszystkie dane w nagłówkach byłyby zapisane binarnie. |
|
« 1 » |