Sockets client/server [gcc]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 853 fois - Téléchargée 32 fois

Contenu du snippet

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 / Exemple :


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

A voir également

Ajouter un commentaire Commentaires
Messages postés
33
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
15 novembre 2007

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é ????
Messages postés
25
Date d'inscription
dimanche 7 novembre 2004
Statut
Membre
Dernière intervention
9 décembre 2004

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
Messages postés
168
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 avril 2005

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.
Messages postés
12
Date d'inscription
samedi 21 février 2004
Statut
Membre
Dernière intervention
17 juin 2004

salut ... ptite question... a quoi sert :
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
dans le serveur
merci
++
Messages postés
13
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
14 octobre 2004

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
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.