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)
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.
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
Fügen Sie beiden Dateien folgende Includes hinzu:
#include <cstdlib>
#include <cstring>
#include <unistd.h>
Ä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.
probieren Sie boost :: asio lib ( http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html ) aus.
Obwohl Clsocket vor vielen Jahren eine wirklich schöne kleine Cross-Plattform (Windows, Linux, Mac OSX) ist: https://github.com/DFHack/clsocket
Hier einige Beispiele für:
1) einfach
2) Gabel
3) Fäden
basierter Server: