begin process at 2010 02 10 07:40:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > SOCKETS CLIENT/SERVER [GCC]

SOCKETS CLIENT/SERVER [GCC]


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :10 166

Auteur : frzburn

Ecrire un message privé
Site perso
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.


 Sources du même auteur

ENCORE UN PONG (LINUX, CURSES) [GCC]
Source avec Zip Source avec une capture COPIER UN FICHIER, LOG DES ACTIONS [GCC]

 Sources de la même categorie

Source avec Zip Source avec une capture ANIMATIION GRAPHIQUE DES STRUCTURES DE DONNÉES par algoro
PILOTAGE DES 8 SORTIES DU PORT // par cedpic
Source avec Zip PARALLEL OBJECT PROGRAMMING IN C++ (POP-C++) : DEMO par lwinkler
Source avec Zip VOTE ELECTRONIQUE par luvianne
Source avec une capture REMOTE POST PHP WITH SOCKET LINUX par 0x0syscall

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLIENT/SERVEUR UTILISANT LES IOCP RÉALISÉ AVEC BORLAND BUILD... par goodboy21
Source avec Zip SERVEUR/CLIENT LINUX par ghost4
Source avec Zip Source avec une capture KEYLOGGER SERVEUR/CLIENT par yann2192
Source avec Zip MINI CHAT C/C++ par edf102
APPLICATION DE TRANSFERT DE FICHIERS SOCKET CLIENT SERVEUR U... par metalicien

Commentaires et avis

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 ;)

Commentaire de camel le 20/05/2003 13:07:02

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

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 ...

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 ?

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

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

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
++

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.

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

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales