Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SOCKETS CLIENT/SERVER [GCC]


Information sur la source

Catégorie :Applications Linux Classé sous : socket, client, serveur, gcc Niveau : Débutant Date de création : 19/05/2003 Date de mise à jour : 19/05/2003 21:47:58 Vu : 9 347

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Mon deuxième programme en c dans Linux...
Encore une fois, pas très pratique, mais ça me permet de progresser quand même...
Alors voilà
 

Source

  • ================
  • client.c
  • ================
  • #include <sys/types.h>
  • #include <sys/socket.h>
  • #include <stdio.h>
  • #include <netinet/in.h>
  • #include <arpa/inet.h>
  • #include <unistd.h>
  • int main()
  • {
  • int sockfd;
  • int len;
  • struct sockaddr_in address;
  • int result;
  • char ch = 'A';
  • sockfd = socket(AF_INET, SOCK_STREAM, 0);
  • address.sin_family = AF_INET;
  • address.sin_addr.s_addr = inet_addr("127.0.0.1");
  • address.sin_port = 9734;
  • len = sizeof(address);
  • result = connect(sockfd, (struct sockaddr *)&address, len);
  • if(result == -1) {
  • perror("oops: client");
  • exit(1);
  • }
  • write(sockfd, &ch, 1);
  • read(sockfd, &ch, 1);
  • printf("char from server = %c\n", ch);
  • close(sockfd);
  • exit(0);
  • }
  • ================
  • server.c
  • ================
  • #include <sys/types.h>
  • #include <sys/socket.h>
  • #include <stdio.h>
  • #include <netinet/in.h>
  • #include <arpa/inet.h>
  • #include <unistd.h>
  • int main()
  • {
  • int server_sockfd, client_sockfd;
  • int server_len, client_len;
  • struct sockaddr_in server_address;
  • struct sockaddr_in client_address;
  • server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  • server_address.sin_family = AF_INET;
  • server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
  • server_address.sin_port = 9734;
  • server_len = sizeof(server_address);
  • bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
  • listen(server_sockfd, 5);
  • while(1) {
  • char ch;
  • printf("server waiting\n");
  • client_len = sizeof(client_address);
  • client_sockfd = accept(server_sockfd,
  • (struct sockaddr *)&client_address, &client_len);
  • read(client_sockfd, &ch, 1);
  • ch++;
  • write(client_sockfd, &ch, 1);
  • close(client_sockfd);
  • }
  • }
================
client.c
================

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
  int sockfd;
  int len;
  struct sockaddr_in address;
  int result;
  char ch = 'A';

  sockfd = socket(AF_INET, SOCK_STREAM, 0);

  address.sin_family = AF_INET;
  address.sin_addr.s_addr = inet_addr("127.0.0.1");
  address.sin_port = 9734;
  len = sizeof(address);

  result = connect(sockfd, (struct sockaddr *)&address, len);

  if(result == -1) {
    perror("oops: client");
    exit(1);
  }
 
  write(sockfd, &ch, 1);
  read(sockfd, &ch, 1);
  printf("char from server = %c\n", ch);
  close(sockfd);
  exit(0);
}


================
server.c
================

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
  int server_sockfd, client_sockfd;
  int server_len, client_len;
  struct sockaddr_in server_address;
  struct sockaddr_in client_address;

  server_sockfd = socket(AF_INET, SOCK_STREAM, 0);

  server_address.sin_family = AF_INET;
  server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
  server_address.sin_port = 9734;
  server_len = sizeof(server_address);
  bind(server_sockfd, (struct sockaddr *)&server_address, server_len);

  listen(server_sockfd, 5);
  while(1) {
    char ch;

    printf("server waiting\n");

    client_len = sizeof(client_address);
    client_sockfd = accept(server_sockfd,
			   (struct sockaddr *)&client_address, &client_len);

    read(client_sockfd, &ch, 1);
    ch++;
    write(client_sockfd, &ch, 1);
    close(client_sockfd);
  }
}

Conclusion

Voilà, comme je disais, complètement inutile.

Encore une fois:
$cc -o client client.c
$cc -o server server.c
$./server &
$./client

Vous pouvez regerdez les résultats avec
$netstat


Au risque de me répété, je suis programmeur débutant, alors je suis ouvert à toutes suggestions.
 

Commentaires et avis

signaler à un administrateur
Commentaire de highcobra le 20/05/2003 09:13:54

Petites suggestions : Tu devrais récupérer les codes de retour du bind et du listen pour voir s'il ont réussis ou pas... Par contre je vois pas l'interet de placer l'accept dans ta boucle infinie parce que si un 2 ème client se connecte, tu perds le premier...

High_Cobra ;)

signaler à un administrateur
Commentaire de camel le 20/05/2003 13:07:02

mais pourquoi personne ne met une source sur les sockets asynchrones !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

signaler à un administrateur
Commentaire de superpa le 21/05/2003 10:13:56

Pour ceux qui sont intéressé, j'ai déposé une source qui comprends plusieurs classes (c'est donc du C++) qui encapsulent ces fonctions.
Elles sont développées pour Unix, mais je pense qu'elles sont compatibles Linux.

http://www.cppfrance.com/article.aspx?ID=1524

Un peu de pub ne fait pas de mal ...

signaler à un administrateur
Commentaire de GlaDeuR le 30/08/2003 07:04:07

j'ai un probleme avec ce programme , sans doute venant de ma configuration :
"oops: clien: Connection Refused"
qq1 peut m'aider ?

signaler à un administrateur
Commentaire de foxugly le 19/02/2004 05:11:16

je suppose que tu as lancé ton client avant ton serveur puisque l'erreur vient du connect !

Ou alors tu as une crasse de firewall qui te refuse une connection meme en loop

j'espere que ca pourra t'aider

signaler à un administrateur
Commentaire de foxugly le 19/02/2004 05:11:24

je suppose que tu as lancé ton client avant ton serveur puisque l'erreur vient du connect !

Ou alors tu as une crasse de firewall qui te refuse une connection meme en loop

j'espere que ca pourra t'aider

signaler à un administrateur
Commentaire de boomslang le 15/08/2004 10:52:37

salut ... ptite question... a quoi sert :
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
dans le serveur
merci
++

signaler à un administrateur
Commentaire de JackosKing le 31/10/2004 19:51:57

Bon alors, ca marche parfaitement sous linux, en revanche sous unix (macosX) ca met un erreur de connection. je vais tester entre les 2 machines pour voir.

signaler à un administrateur
Commentaire de CptLuthor le 09/12/2004 08:40:50

salut
Moi je voudrai réaliser un client et un server VPN le plus simple possible, c a d je lance le server (un .exe tout petit) , mes pots lancent chacun le client ( un .exe tout petit )  et hop  on est connecté à distance et on se voit sur le réseau.

je précise je ne ve pas de service de messagerie, c a d je ve juste quon se voi en reseau comme ca on se voit dans les jeux comme si on été en reseau local.

voila merci à ce qui pourront maider

signaler à un administrateur
Commentaire de facilus le 09/11/2006 13:56:35

salut,
avec cette instruction server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); c pour le ca localhost é cmt la généralisé ????

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Tutorial - Socket, serveur, client BCPP + GUI [ par NyxArm ] Bonjours tout le monde, je suis présentement en période d'appretissage du language CPP sur Borland(v.6). Maintenant que j'ai acquis quelque conna Evènement sur un socket client [ par darsh99 ] J'aimerais savoir si la méthode utilisée par BlackGoddess pour son serveur (http://www.cppfrance.com/article.aspx?ID=1287) est récupérable pour gérer Thread et socket besoin de conseil [ par kawito ] Salut,je desire realiser un client/serveur TCPle probleme est que les fonctions accept et recv sont bloquante.donc cela bloque l'affichage etc...mon p programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska problème socket sous windows [ par kod32 ] Voici mon code : (winsock2.h)-----------------------------int main(){ /* inialisation */ WSADATA wsa; WSAStartup(MAKEWORD(2,0), &wsa); /* client & server [ par Stormy ] J'ai codé un serveur simple usant de TCP. Comme client j'utilise NetCat. Or, quand NetCat 'ferme', mon serveur ne détecte pas la clôture de la relatio Qd un Socket reçoit une trame erronée ... [ par valoue ] Bonjour,Je suis en train de développer una appli client serveur sous VC++, j'utilise des SOCKET.Le client et le serveur communiquent en s'envoyant des Client/Serveur, encore..... [ par glubust ] Je veux faire fonctionner une application client/serveur sous UNIX (client) et WINDOWS (serveur).Le programme client envoi une simple requête au serve connection client serveur avec MFC [ par Spiffou ] Bonjour à tous,j'avance petit à petit dans la programmation socket, mais je suis confronté à une nouvelle difficulté et j'ai une ou deux question sans Question socket - Client/Serveur [ par LordBob ] Bonjour a tous,alors voila je suis en train de developper un petit programme client/serveur... donc tout se passe bien, mon client se connecte parfait


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.