Int übertragen mit sockets

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe Leute,
    wir versuchen uns gerade an der Übergabe von Variablen. Dazu haben wir uns mit der Hilfe von g**gle einen Server und Client erstellt. Server läuft auf dem Pi und ist in C, Client auf Win7 und ist in C#.
    Erstaunlicherweise hats sogar nach einigen Versuchen funktioniert und wir können darüber "chatten".
    Was wir brauchen ist aber die Übergabe von Ints oder einem Int Array.
    Haben schon etliches versucht auf der Serverseite das Char zu Int zu wandeln. Klappt nicht mit unseren Kenntnissen.
    Haben dann versucht den Typ des Streams anzupassen. Klappt nicht mit unseren Kenntnissen :daumendreh2:

    Falls sich jemand findet der mal drüberlesen kann und weiß wie das geht oder eine Idee hat wären wir sehr dankbar.

    Lieben Gruß
    Sebastian


    "Server in C"


    "Client in C#"

  • Haben schon etliches versucht auf der Serverseite das Char zu Int zu wandeln.

    Z. B. mit:

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Wer Aerger sucht, soll nicht enttaeuscht werden ;)

    Da ist ein Server, der genau einen int empfaengt und wieder zurueckschickt:

    Ich hoffe, Ihr wisst, was Ihr Euch damit einhandelt.

    (Hints: Byte order, Byte packing, sizeof(int))

    rpi444

    Wenn schon dann so:

    int x ;
    sscanf( "1234", "%d", &x ) ;

    Einmal editiert, zuletzt von Tell (22. Januar 2014 um 14:55)



  • rpi444

    Wenn schon dann so:

    int x ;
    sscanf( "1234", "%d", &x ) ;

    Naja, der TE meinte ja "char" (ein Zeichen) und nicht "char *".

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (22. Januar 2014 um 15:10)

  • [font="Tahoma, Verdana, Arial, sans-serif"]@rpi444[/font]

    [font="Tahoma, Verdana, Arial, sans-serif"]> Naja, der TE meinte ja "char" (ein Zeichen) und nicht "char [/font][font="Tahoma, Verdana, Arial, sans-serif"]*[/font][font="Tahoma, Verdana, Arial, sans-serif"]".[/font]
    [font="Tahoma, Verdana, Arial, sans-serif"]Ich bin nicht so sicher, ob er den Unterschied kennt ;)[/font]

    [font="Tahoma, Verdana, Arial, sans-serif"]Der Buffer in "seinem" Programm hat eine Kapazitaet von 1024 chars.[/font]

  • [font="Tahoma, Verdana, Arial, sans-serif"]Der Buffer in "seinem" Programm hat eine Kapazitaet von 1024 chars.[/font]

    Ja das hatten wir so fertig kopiert ^^ Benötigen momentan aber nur 13 Stellen des Arrays und haben es auf 2o begrenzt. Haben auch eine Lösung gefunden. Klappt diese "unschöne Lösung" werde ich sie Posten
    damit ihr mir sagen könnt warum man das nicht so macht. Programmieren kann man ja viel aber ein gewisser
    Standard sollte ja eingehalten werden.

    Lieben Gruß
    Sebastian

    Edit:
    So haben wir das nun gelöst
    z.B.: i
    ntx1 wird erst recvBuff[0] beschrieben nachdem die 48 abgezogen wurde und anschließend mit 100 multipliziert
    ntx1 wird erst recvBuff[1] beschrieben nachdem die 48 abgezogen wurde und anschließend mit 10 multipliziert
    ntx1 wird erst recvBuff[2] beschrieben nachdem die 48 abgezogen wurde und anschließend mit 1 multipliziert

    So kommen wir auf unser 3 Stelliges int. für intx1. Mit 100 bzw. 10 wird wegen der Stellenwertigkeit multipliziert

    Ist das so annehmbar?


    Code
    for(i=0,j=100 ; i<=2 ;i++, j/10)
        {
            //- 48 Weil ASCII Zeichen 48 = 0
            intx1 +=((int) extern recvBuff[i] -48)*j; 
            intx2 +=((int) extern recvBuff[3+i] -48)*j;
            inty1 +=((int) extern recvBuff[6+i] -48)*j;
            inty2 +=((int) extern recvBuff[9+i] -48)*j;  
    }

    Einmal editiert, zuletzt von Sebastian (22. Januar 2014 um 18:08)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!