Client - Server - Socket - Zwei Integer übertragen

Gast #3640116
Lesenswert?

Hallo allesamt,

ich muss für die Schule einen Client in C schreiben, der über Sockets 
zwei Integer Werte an einen Server übermittelt.

Das Verbinden und Senden funktioniert einwandfrei. Jedoch wurde dem 
Server eine "merkwürdige" Funktion implementiert. Und zwar sollen die 
beiden Integerzahlen in einem Buffer übermittelt werden und 
folgendermaßen entpackt werden:

1
void entpackeWerte(unsigned char *buffer, unsigned int *x, unsigned int *y)
2
{
3
   *x = (buffer[0] << 8) | buffer[1];
4
   *y = (buffer[2] << 8) | buffer[3];
5
}

Ich verstehe das nicht ganz. Beispiel:

Sagen wir der Wert x ist eine 2 (bzw 00000010) am Client. Ich sende 
diese Zahl via buffer[1] an den Server und er macht erstmal eine 
Linksverschiebung um 8 bits:

x = 00000010 00000000

Egal welche Zahl jetzt in buffer[1] steckt.. ich bekomme auch mit dem 
|-Operator doch MINIMAL einen Wert von 100000000. Also kann das nicht 
die Lösung sein.

Sende ich die Zahl 2 im buffer[1] und sage buffer[0] = 0, dann erhalte 
ich garkeinen Wert.

Kann mir jemand helfen?
Danke!

Kann mir jemand
Gast #3640143
Lesenswert?

Thuy Nguyen schrieb:
> Sagen wir der Wert x ist eine 2 (bzw 00000010) am Client. Ich sende
> diese Zahl via buffer[1] an den Server und er macht erstmal eine
> Linksverschiebung um 8 bits:

x ist doch egal. Die Frage ist was in buffer stehen soll. Nach den code 
sollen dort 4 Byte drin stehen. Diese werden dann in X und Y aufgeteilt.
Gast #3640280
Lesenswert?

Konrad S. schrieb:
> buffer[0] = 0;
> buffer[1] = 2;
> printf( "%d\n", (buffer[0] << 8) | buffer[1] );
> Probier's mal aus.

Ich habe es ausprobiert, aber leider funktioniert es nicht, wenn eine 
der Variablen den Wert 0 besitzt auf dem "Server"

wenn ich es mit printf ausgeben lasse innerhalb des Programm 
funktioniert es für Zahlen unter 256
Gast #3640348
Lesenswert?

Konrad S. schrieb:
> int main( void )
> {
>     unsigned char buffer[2];
>     buffer[0] = 0;
>     buffer[1] = 2;
>     printf( "%d\n", (buffer[0] << 8) | buffer[1] );
>     return 0;
> }

Gebe ich es exakt so ein, kommt natürlich eine 2 raus.

Ändere ich den Text zu "buffer[1] = 256" erhalte ich eine 0 !

Versuche ich den buffer per connect an den Server zu übermitteln, 
passiert gar nichts.
Gast #3640952
Lesenswert?

T.N. schrieb:
> Konrad S. schrieb:
>> int main( void )
>> {
>>     unsigned char buffer[2];
>>     buffer[0] = 0;
>>     buffer[1] = 2;
>>     printf( "%d\n", (buffer[0] << 8) | buffer[1] );
>>     return 0;
>> }
>
> Gebe ich es exakt so ein, kommt natürlich eine 2 raus.
>
> Ändere ich den Text zu "buffer[1] = 256" erhalte ich eine 0 !

Natürlich. Wie groß ist buffer[1]? Welches ist der maximale Wert, der da 
drin stehen kann? Was muß also passieren, wenn du da 256 reinschreibst?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren