web-dev-qa-db-fra.com

Qu'est-ce qu'un simple C ou C++? TCP exemple de serveur et de client?

J'ai besoin d'implémenter rapidement une très petite solution serveur/client C ou C++ TCP. Cela consiste simplement à transférer littéralement un tableau d'octets d'un ordinateur à un autre - il n'est pas nécessaire que celui-ci soit évolutif/compliqué. Le plus simple sera le mieux. Rapide et sale si vous le pouvez.

J'ai essayé d'utiliser le code de ce didacticiel, mais je ne pouvais pas le construire avec g ++ sous Linux: http://www.linuxhowtos.org/C_C++/socket.htm

Si possible, j'aimerais éviter les bibliothèques tierces, car le système sur lequel j'exécute ceci est assez restreint. Il doit s'agir de C ou C++, car l'application existante est déjà implémentée.

Grâce à la réponse de emg-2, j'ai réussi à rendre l'échantillon de code mentionné ci-dessus compatible avec C++ en procédant comme suit:

Ajoutez ces en-têtes au client et au serveur:

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

Dans server.c , changez le type de clilen en socklen_t.

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

Dans client.c , modifiez la ligne suivante:

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

À:

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

J'ai déjà utilisé Le Guide de Beej sur la programmation en réseau dans le passé. C'est en C, pas C++, mais les exemples sont bons. Allez directement à section 6 pour les exemples de programmes client et serveur simples.

41
Bill the Lizard

Si le code doit être simple, alors vous demandez probablement un exemple C basé sur des sockets BSD classiques. Des solutions comme boost::asio sont à mon sens assez compliquées pour donner un exemple court et simple du "bonjour le monde".

Pour compiler les exemples que vous avez mentionnés, vous devez apporter des corrections simples, car vous compilez sous compilateur C++. Je fais référence aux fichiers suivants:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
de: http://www.linuxhowtos.org/C_C++/socket.htm

  1. Ajoutez les éléments suivants aux deux fichiers:

    #include <cstdlib>
    #include <cstring>
    #include <unistd.h>
    
  2. Dans client.c , changez la ligne:

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

    à:

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

Comme vous pouvez le constater en C++, une conversion explicite est nécessaire.

13
anon

essayez boost :: asio lib ( http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html ) il a beaucoup d'exemples.

6
bayda

Bien qu'il y a plusieurs années, clsocket semble être une petite plate-forme vraiment agréable (Windows, Linux, Mac OSX): https://github.com/DFHack/clsocket

1
Erwin Coumans

Voici quelques exemples pour:

1) simple
2) Fourchette
3) Fils

serveur basé: 

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

0
Guy L