Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinSock]Przesył wiadomości

Ostatnio zmodyfikowano 2013-08-28 14:25
Autor Wiadomość
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
P-90881
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?
P-90884
kubawal
» 2013-08-26 10:24:09
» Kurs WinSock, C++Trochę zaawansowane techniki lekcja
Nagłówek Enkapsulacja danych.
P-90899
RazzorFlame
» 2013-08-26 12:00:51
Napisz pakiety. Jeśli nie wiesz jak to popatrz do źródeł SFML - sf::Packet.
P-90901
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.
P-90933
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:
C/C++
// Wysyłanie wiadomości
Net.Message.Add( "ERROR" );
Net.Message.Add( "Jesteś aresztowana! Ręce do góry!" );
Net.Message.Send( Server ); // Wysłanie do servera

// Odbieranie wiadomości
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 );
    }
}
P-91083
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.
P-91123
« 1 »
  Strona 1 z 1