-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Suche Funktion zum Datenaustausch im Netzwerk

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.05.2007
    Beiträge
    112

    Suche Funktion zum Datenaustausch im Netzwerk

    Anzeige

    Hallo zusammen, ich Suche eine hoffentlich einfache Funktion die es ermöglicht beispielsweise einen einfachen Integer Wert über das Netzwerk zu verschicken.

    Also wie man es im Attachment erkennt, soll der Nutzer einen Wert eingeben beispielsweise 4 dieser soll dann übers Netzwerk verschickt werden, und beim anderen Nutzer ebenfalls in einer Konsolenanwendung ausgegeben werden.

    Ich weiß nicht ob es so eine Funktion von Haus aus gibt, aber wäre schön wenn ihr mir das sagen könntet. Vll hat einer von euch soetwas schon programmiert, aber die "Ur" Befehle würde reichen will mich damit ein bisschen auseinander setzen.

    Adressieren würde ich das ganze gerne über die IP adresse, müsste doch klappen, oder?

    Danke schonmal für eure Hilfe
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken netzwerk_kom.jpg  

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    (ganz) so einfach wie du es dir vorstellst geht es nicht, weil du sockets verwenden musst, und diese erst initialisiert werden müssen. dann brauchst du einen server, der auf verbindungen wartet und einen client, der versucht eine verbindung herzustellen. die beiden können dann daten austauschen.

    hier ist das recht gut erklärt:
    http://www.c-worker.ch/tuts/wstut_op.php

    gruesse

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.05.2007
    Beiträge
    112
    Mhm das erfordert dann doch eine etwas längere Einarbeitungszeit. Hatte da an sowas wie den Befehl netsend gedacht, dient dazu Nachrichten im Netzwerk zu verschicken. Nur halt als C Funktion... Geht das ganze mit Linux vielleicht einfacher? Da sind die Konsolenanwendungen ja in der Regel noch weitaus mächtiger als bein Windows.

    Auf meinem Lappi läuft Open Suse und auf meinem Rechner würde ich dann mit VMWareplayer auch Open Suse laufen lassen. Aber Linux programmierung ist denke ich nicht das selbe wie unter Windoof shit^^

    Mfg Matze

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Naja, Sockets sind eigentlich garnicht soooo kompliziert wie sich das im ersten Moment anhört...


    Bei der Übertragung von Daten per IP-Protokoll musst du dir als erstes mal eine einfache Frage stellen:

    TCP oder UDP?

    TCP ist ein verbindungsorientiertes Protokoll, d.h. du stellst eine TCP Verbindung zwischen den beiden Programmen her, und kannst dann deine Daten übertragen. Das TCP Protokoll stellt dabei sicher, daß deine Pakete auch tatsächlich beim Empfänger ankommen, und kümmert sich auch noch um zahlreiche weitere Dinge, die dir aber erstmal egal sein können.
    (z.B. so Geschichten daß die Bandbreite bei mehreren TCP Verbindungen gleichmäßig aufgeteilt wird etc.)


    UDP ist in so ziemlich jeder Hinsicht wesentlich unkomplizierter als TCP...
    im Prinzip ist das UDP-Protokoll so einfach, daß man es schon fast nicht mehr als Protokoll bezeichnen kann, denn UDP Pakete werden schlicht und einfach 1:1 in IP Paketen verpackt und auf die Reise geschickt. Es muss keine Verbindung aufgebaut werden, man wählt einfach die passende Ziel-IP, und schickt seine Pakete ab. Nachteil der Geschichte ist, daß bei UDP erstmal nicht garantiert werden kann daß ein Paket überhaupt ankommt. Derartige Fehler können vom Protokoll garnicht erkannt werden, d.h. wenn du sicher sein willst daß ein Paket den Empfänger auch wirklich erreicht musst du dich selber darum kümmern (z.B. indem du den Empfänger eine Bestätigung abschicken lässt)



    Mein Vorschlag wäre in deinem Fall ganz klar UDP, denn da musst du dich nicht darum kümmern irgendwelche Verbindungen auf- und vor allem korrekt wieder abzubauen.
    So viele Treppen und so wenig Zeit!

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.05.2007
    Beiträge
    112
    So ich habe jetzt mal das UDP Tutorial von der Seite www.c-worker.ch ausprobiert mit folgendem Code
    Code:
    #include <windows.h>
    #include <winsock.h>
    #include <stdio.h>
    #include <conio.h>
    
    //Prototypen
    
    int startWinsock(void);
    
    int main()
    {
      long rc;
      SOCKET s;
      char buf[256];
      SOCKADDR_IN addr;
      SOCKADDR_IN remoteAddr;
      int         remoteAddrLen=sizeof(SOCKADDR_IN);
      rc=startWinsock();
    
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        getch();
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }  //UDP Socket erstellen
    
      s=socket(AF_INET,SOCK_DGRAM,0);
    
      if(s==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        getch();
        return 1;
      }
      else
      {
        printf("UDP Socket erstellt!\n");
      }  // addr vorbereiten
    
      addr.sin_family=AF_INET;
      addr.sin_port=htons(5999);
      addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    
      while(true)
      {
        printf("Text eingeben: ");
        gets(buf);
        rc=sendto (s,buf,strlen(buf),0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: sendto, fehler code: %d\n",WSAGetLastError());
          return 1;
        }
        else
        {
          printf("%d Bytes gesendet!\n", rc);
        }
    
        rc=recvfrom(s,buf,256,0,(SOCKADDR*)&remoteAddr,&remoteAddrLen);
        if(rc==SOCKET_ERROR)
        {
           printf("Fehler: recvfrom, fehler code: %d\n",WSAGetLastError());
           getch();
           return 1;
        }
        else
        {
          printf("%d Bytes empfangen!\n", rc);
          buf[rc]='\0';
          printf("Empfangene Daten: %s\n",buf);
        }
      }
    }
    
    int startWinsock(void)
    {
       WSADATA wsa;
       return WSAStartup(MAKEWORD(2,0),&wsa);
    }

    Habe in einem anderen Forum gelesen das es eigentlich funktionieren soll, allerdings meckert mein Linker noch rum. Habe als Compiler
    Mircosoft Visual C++ 6.0

    Code:
    Linker-Vorgang läuft...
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _recvfrom@24
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _sendto@24
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _inet_addr@4
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _htons@4
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAGetLastError@0
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _socket@12
    Kom.obj : error LNK2001: Nichtaufgeloestes externes Symbol _WSAStartup@8
    Debug/Kommunika UDP.exe : fatal error LNK1120: 7 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Unter Einstellungen kann ich noch diverse dlls einlinken, allerdings weiß ich nicht welche, habt ihr vielleicht eine Ahnung? Eigentlich ist diese Copy & Paste geschichte nicht nach meiner Mütze aber erstens ist es in der Schulzeit noch zu stressig sich für so ein kleines Projekt damit tiefgründig ausseinander zu setzten und zweitens lernt man an einem funktionierden Code doch wesentlich einfacher.



    // EDIT Man wer lesen kann ist klar im Vorteil^^ auf der Seite stand sogar die lib die ich noch einfügen muss.
    So werde mich am WE mal ans testen und modifizieren machen, danke für eure Hilfe ich melde mich dann!

    Mfg Matze

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    verzeih die frage, aber was hat das in erster linie mit atmel controllern zu tun ? sonst würde ich dir dringen raten mal ins www.c-plusplus.de forum zu gehen, dort findest du haufenweise topics zur socketprogrammierung, mein tipp, WINAPI subforum ...

    leider hab ich meinen laptop frisch formatiert und mein PC ist bis nächste woche nicht zugänglich, sonst könnt ich dir meine winsocket lib geben, die baut auf eventgesteurte sockets zurück

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.05.2007
    Beiträge
    112
    Hi Ceos, das ist halt nur ein Teil meines größenwahnsinnigen Planes Nein verstehe deine Frage ist ja auch berechtigt, am Ende sollen dann die Daten ans RN-Controll über die RS Schnittstelle übertragen werden. "Brauche das also als Fernbedienung".

    Der Grund warum ich das hier ins Roboternetz poste ist im Grunde genommen einfach, ich weiß einfach das sich hier viele kompetente Leute tummeln, natürlich gibt es die im c++ Forum auch, aber ich wollte es erstmal hier probieren.

    Wenn mein Quellcode nicht funktioniert, und du deine Libs noch irgendwo hast wäre ich dir Dankbar
    Mfg Matze

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    EDIT: meine bibliothek ist im prinzip nur ne cpp file die alle üblichen c-socket befehle in methoden fasst und ein WENIG automatismus beinhaltet, du musst theoretisch nur ein waitforsingleobject(); in einer schleife aufrufen und wenn der socket etwas empfängt oder sagen will setzt er das event und der waitfor beendet mit WAIT_RESPONE_0 glaube ich, dann musst du die daten nurnoch auslesen und auswerten und das flag zurücksetzen

    http://www.b-redemann.de/produkte-ethernet.shtml
    das ist das unten erwähnte modul im bild rechts
    /EDIT

    größenwahn zeugt nur von überfliessender kreativität ....

    huh? wie ? moment ? also doch !
    hehe dann versuch es doch mal mit nem "nackigen" mega32 und nem ethernetmodul in kombination mit ner schicken AVR bibliothek die DHCP UDP IP beherrscht ....

    die lib findest du hier

    http://www.roboternetz.de/phpBB2/viewtopic.php?t=40807

    und hier das bild von meinem aufbau (also UDP senden und empfangen geht klasse, DHCP NOCH nicht, die VT100 genannte hyperterminal konsole ist auch klasse)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken netzwerk.jpg  

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.05.2007
    Beiträge
    112
    Hi Coes, sehr schöner Versuchsaufbau. Die Kommunikation habe ich jetzt endlich soweit mit dem UDP Protokoll im Griff, das ich normal Daten senden kann.

    Das mit der Ethernet Schnittstelle hört sich sehr interressant für zunkünftige Projekte an, in den Sommerferien wollte ich erstmal ein paar Netzwerkkabel verlegen, da könnte man sicher damit einiges Anstellen, Licht anschalten, Steckdosen schalten, sehr praktisch. Hehe bald brauch ich gar nicht mehr aufstehen xD

    Die Kommunikation läuft soweit eigentlich stabil, habe es jetzt testweise über einen Switch laufen gehabt, später soll das ganze dann über einen WLAN-Router laufen, der Laptop soll auf einem kleinen Bot platz finden, und die Daten die ich ihm über das UDP Protokoll sende über RS232 an das RN-Board weiterleiten. Wie sieht es eigentlich mit der Genauigkeit aus? Hatte gedacht das ich zur Sicherheit Prüfsummen und Doppelsendungen hinzufüge. Also wenn zweimal absolut das selbe gesendet wurde, soll er die Aktion durch führen.

    Ich glaube um deinen Versuchsaufbau richtig nach vollziehen zu können und es selber zu programmieren, bedarf es noch einiger Zeit, das ist schon etwas schwieriger als das ich es mir zutrauen würde.


    Gibt es eigentlich für C die Möglichkeit eine grafische Oberfläche zu programmieren?? Es würden erstmal 4 Buttons ausreichen. In anderen Programmiersprachen ist das eigentlich ganz simpel also in Javascript.
    Button hingezaubert dann onclick(Funktion) und schon hatte man seine Funktion aufgerufen gibbet es sowas auch für c?

    Werde dann noch ein wenig an meinem größenwahnsinnigen Plan weiterarbeiten Mein Problem ist immer nur das ich viele verschiedene Sachen anfange und nicht zuende bringen Der einzige Vorteil der daraus entsteht ist das man "alles" mal gemacht hat .

    Mfg Matze

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    JEIN

    du kannst mal versuchen ob du mit dem BORLAND TURBO EXPLORER klarkommst, da sind auch schon fertige module für UDP Clients mit drinne, aber du bisndest dich damit erstens an c++ und zweitens auch an windoof

    auf arbeit hab ich die "vollversion" aka Borland development studio 2k6 und zu hause die kostenlosversion turboexplorer, unterschied ist das der explorer auf eine programmiersprache begrenzt ist und ich bin recht zufrieden, drag & drop oberflächenbau, eventgesteuerte module, RELATIV einfacher thread-support (anfänger FINGER WEG)

    zur datensicherheit, bei UDP empfehle ich ein 4 byte startsignal uz definieren, darauf folgend 1 byte für die paketlänge INKLUSIVE startsignal und prüfsumme, macht 256byte - 4byte signal -1byte CRC = 251byte datenladung maximal, sollte wohl reichen ?! BEDENKE es kann auch passieren das ein paket mal NICHT vollständig ankommt sondern in 2 teilen, wobei im worst case NACH dem 2ten teil gleich der 1te teil des nächsten paket angehängt ist ... das ist EVIL HELL WORST CASE ... aber bei den belastungen die wir auf arbeit im fehlerfall schonmal produzieren bereits vorgekommen XD

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •