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

[WinSock] Przesyłanie liczb funkcją send()

Ostatnio zmodyfikowano 2010-12-23 11:32
Autor Wiadomość
filipesq
Temat założony przez niniejszego użytkownika
[WinSock] Przesyłanie liczb funkcją send()
» 2010-12-22 21:44:45
Witajcie, dawno mnie nie było.

Od razu przejdę do rzeczy: Czy jest jakiś sposób, aby funkcją send() w WinSock przesyłać zmienne typu int? Oczywiście wiem, że można to zrobić tak:
- Zapisać liczbę z int do string
- potem ze string do char
- a po wysłaniu z char do string
- i ze string do int
Ale może jest jakiś inny sposób, np. odpowiednik funkcji send(), tylko, że do liczb?
P-25409
ison
» 2010-12-22 21:54:00
C/C++
int liczba = 123;

char temp[ 11 ];
sprintf( temp, "%d\0", liczba );
send( socket, temp, 11, 0 );

albo

C/C++
int send_int( const SOCKET & send_int_socket, const int send_variable, const int send_length, const int send_flags ) {
    char * temp = new char[ send_length + 2 ];
    sprintf( temp, "%d\0", send_variable );
    int result = send( send_int_socket, temp, send_length, send_flags );
    delete[] temp;
    return result;
}
C/C++
send_int( MySocket, 10, 2, 0 );
P-25410
DejaVu
» 2010-12-22 22:24:12
W zasadzie to nie masz serializacji i deserializacji :)
P-25411
ison
» 2010-12-22 23:07:54
jakiej serializacji? ;D
Język C++ nie posiada wbudowanego wsparcia dla serializacji. Istnieją jednak przeznaczone do tego biblioteki, np. S11n.
o to chodzi?

Serializacja służy do zapisu stanu obiektu, a później do odtworzenia jego stanu.
czy serializacji nie tyczy się przypadkiem tylko większych obiektów? stosuje się to dla 1 inta?
P-25413
DejaVu
» 2010-12-22 23:42:06
Miałem na myśli konwersje Litle Endian/Big Endian, które stosuje się dla danych przesyłanych binarnie większych od jednego bajta. W przypadku łańcucha znaków typu char wysyłasz znaki, a znak jest wielkości 1 bajta i tworzy spójną informację. W przypadku przesyłania 2 bajtów informacja może zostać różnie odczytana przez drugi komputer w zależności od stosowanej konwencji. Przykładowo 0xabcd może być odczytane przez drugi komputer jako 0xcdab, co jak łatwo się domyślić nie będzie oczekiwanym rezultatem.
P-25414
filipesq
Temat założony przez niniejszego użytkownika
» 2010-12-23 11:32:13
Jednak wykorzystałem do tego stringi. Biorąc pod uwagę resztę kodu, w moim przypadku są wygodnym rozwiązaniem. Zamykam temat.
P-25421
« 1 »
  Strona 1 z 1