Networking-Klasse (Sockets)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Liebe Community,

    für mein aktuelles Projekt brauche ich noch eine Networking-Klasse, die mit Sockets funktioniert.

    So sieht aktuell meine Klasse im Header aus:

    Das sind die Funktionen, die ich gerne hätte.

    Ich habe mir zu den Sockets folgendes durchgelesen: Link
    Windows + Linux, da der Server auf Linux laufen soll, aber der Client für Windows ist.

    Nun ist mein Problem, wie ich denn den Server öffne (Funktion "open()": Server öffnen und warten, bis Client connected ist, dann true zurückgeben) und die Funktion offen halte und zwar solange, bis die Funktion "end()" aufgerufen wird. Dazwischen sollte ich beliebig oft "sendData()" benutzen können.

    Wer kann helfen?
    Danke im Voraus!

    MfG

  • So so ... sockets auch noch ...

    Also mit C++ musst Du Dich schon selbst rumschlagen - wobei ich mal behaupte, dass es auch eine socket-Klasse unter Linux gibt.
    Generisch programmiert kannst Du das in dem RGB-Lichteffekte Teil nachlesen. Da läuft auf dem RPi ein Server, auf den Du Dich z.B. per telnet verbinden kannst.
    Wenn Du also das mal auseinanderpflückst, hast Du alles was Du evtl. brauchst: listener, Command-Parser, ...

    cu,
    -ds-

  • Am besten gibt es zwei Klassen: ServerSocket und Socket

    ServerSocket hat folgende Methoden:

    bool open( int port )
    {
    ::socket()
    ::bind()
    ::listen()
    }

    Socket accept()
    {
    ::accept()
    }

    void close()
    {
    ::close()
    }


    Socket hat folgende Methoden:

    Socket( inf fd )
    {
    // wird vom ServerSocket gebraucht
    }

    bool send()
    {
    ::send()
    }

    size_t receive( BYTE *buffer, size_t bufsize )
    {
    ::recv()
    }

    Und dann kommt die grosse Frage: wie viele Verbindungen gleichzeitig ?

    Und wenn > 1: wie ?


  • ...

    Und dann kommt die grosse Frage: wie viele Verbindungen gleichzeitig ?

    Und wenn > 1: wie ?
    ...

    Ha ... da muss der C++ Verweigerer wieder herhalten ;) ...
    Hat schon seine Vorteile, wenn man sich lieber mit den generischen Funktionen befasst.

    Der listen() bekommt als Argument (backlog oder so ...) die max. Anzahl der Verbindungen, die per queue verwaltet werden.
    Der accept gibt dann jeweils einen socket für eine wartende Verbindungsanforderung zurück.

    Mit anderen Worten: das managed das System, wenn gewünscht ;) ...

    cu,
    -ds-

  • Die Sache ist, es ist nur eine Verbindung. 1 Server und 1 Client.
    Es dient nur zur Übermittlung von Daten vom Raspberry zum Laptop/PC (jenachdem).

    Wenn ich das von Tell richtig verstanden habe, dann sollte das jetzt kein Problem sein, da ich eig. lediglich Probleme hatte, die socket-Methoden aufzuteilen.

    Noch eine Frage: Ich hatte mir vor einer Weile ein Testprogramm geschrieben, jedoch wurde da der Socket sofort geschlossen (kein send()/recv() war drin, da das einfach nur zum testen für den Verbindungsaufbau war), obwohl ich niemals close()/closesocket() ausgeführt habe. Warum?

    MfG

  • > Wenn ich das von Tell richtig verstanden habe, dann sollte das jetzt kein
    > Problem sein, da ich eig. lediglich Probleme hatte, die socket-Methoden
    > aufzuteilen.
    Das ist wirklich kein Problem. Tausende von Studenten machen das
    jedes Jahr ;)

    > Noch eine Frage: Ich hatte mir vor einer Weile ein Testprogramm geschrieben,
    > jedoch wurde da der Socket sofort geschlossen (kein send()/recv() war drin,
    > da das einfach nur zum testen für den Verbindungsaufbau war), obwohl ich
    > niemals close()/closesocket() ausgeführt habe. Warum?
    Der ServerSocket bleibt sowieso offen, der Socket bleibt aktiv bis einer der
    beiden Teilnehmer die Verbindung schliesst.

Jetzt mitmachen!

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