wake-up-neo.com

Was ist ein einfaches C oder C++? TCP Server- und Client-Beispiel?

Ich muss schnell eine sehr kleine C/C++ TCP Server/Client-Lösung implementieren. Dies ist einfach, um buchstäblich ein Array von Bytes von einem Computer auf einen anderen zu übertragen - es muss nicht skalierbar/zu kompliziert sein. Je einfacher desto besser. Schnell und schmutzig, wenn du kannst.

Ich habe versucht, den Code aus diesem Tutorial zu verwenden, konnte es jedoch nicht mit g ++ unter Linux erstellen: http://www.linuxhowtos.org/C_C++/socket.htm

Wenn möglich, möchte ich auf Bibliotheken von Drittanbietern verzichten, da das System, auf dem ich dies ausführt, ziemlich eingeschränkt ist. Dies muss C oder C++ sein, da die vorhandene Anwendung bereits implementiert ist.

Dank der Antwort von emg-2 ist es mir gelungen, das oben erwähnte Codebeispiel mit C++ kompatibel zu machen, und zwar mit den folgenden Schritten:

Fügen Sie diese Header sowohl dem Client als auch dem Server hinzu:

#include <cstdlib>
#include <cstring>
#include <unistd.h>

Ändern Sie in server.c den Typ von clilen in socklen_t.

int sockfd, newsockfd, portno/*, clilen*/;
socklen_t clilen;

Ändern Sie in client.c die folgende Zeile:

if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... }

Zu:

if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
38
Nick Bolton

Ich habe in der Vergangenheit Beej's Guide to Network Programming verwendet. Es ist in C, nicht in C++, aber die Beispiele sind gut. Gehen Sie direkt zu Abschnitt 6 für die einfachen Client- und Server-Beispielprogramme.

41
Bill the Lizard

Wenn der Code einfach sein sollte, fragen Sie wahrscheinlich nach einem C-Beispiel, das auf herkömmlichen BSD-Sockets basiert. Lösungen wie boost::asio sind ziemlich kompliziert, wenn es um ein kurzes und einfaches "Hallo Welt" -Beispiel geht.

Zum Kompilieren der von Ihnen erwähnten Beispiele müssen Sie einfache Korrekturen vornehmen, da Sie unter C++ - Compiler kompilieren. Ich beziehe mich auf folgende Dateien:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
from: http://www.linuxhowtos.org/C_C++/socket.htm

  1. Fügen Sie beiden Dateien folgende Includes hinzu:

    #include <cstdlib>
    #include <cstring>
    #include <unistd.h>
    
  2. Ändern Sie in client.c die Zeile:

    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

    zu:

    if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

Wie Sie in C++ sehen können, ist eine explizite Umwandlung erforderlich.

13
anon

probieren Sie boost :: asio lib ( http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html ) aus.

6
bayda

Obwohl Clsocket vor vielen Jahren eine wirklich schöne kleine Cross-Plattform (Windows, Linux, Mac OSX) ist: https://github.com/DFHack/clsocket

1
Erwin Coumans

Hier einige Beispiele für:

1) einfach
2) Gabel
3) Fäden

basierter Server: 

http://www.martinbroadhurst.com/server-examples.html

0
Guy L