info-help Index du Forum info-help
Bienvenue sur le site des utilisateurs raisonnables de l'informatique
 
 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Socket programming

 
Poster un nouveau sujet   Répondre au sujet    info-help Index du Forum -> Info-help -> Tutorial
Sujet précédent :: Sujet suivant  
Auteur Message
Co2SoFt


Hors ligne

Inscrit le: 03 Mai 2006
Messages: 3
Localisation: haute normandie
Point(s): 0
Moyenne de points: 0,00

MessagePosté le: Dim 7 Mai 2006 - 14:11    Sujet du message: Socket programming Répondre en citant

Ici vous allez avoir une approche à la programmation d'un socket en c/c++ portable sur windows/linux pour le protocol TCP (Transmission Control Protocol).

Qu'est ce qu'un socket ?
Citation:
Mis au point par l'université de Berkeley un socket est une interface logiciel permettant d'utiliser les services des protocoles réseau d'un système d'exploitation.


Pour programmer un socket il faut tout d'abord inclure les headers nécessaire.

Les headers
Citation:

Pour windows :
#include <winsock.h>

Pour linux :
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netdb.h>


Dans votre code pour utiliser les socket vous aurrez besoin de définir quelques variables et fonctions.

Tout d'abord déclarer la socket :
socket
Citation:
int socket(int domain, int type, int protocol);


Ensuite déclarer la structure sockaddr_in :
Citation:
struct sockaddr_in
{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};


Une fois tout ca déclaré et défini on passe a la connexion :
connect
Citation:
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);


On envoit ce qu'on le veut grace à :
send
Citation:
int send(int s, const void *buf, size_t len, int flags);


Et on recoit avec :
recv
Citation:
int recv(int s, void *buf, int len, unsigned int flags);


Voici un code qui utilise TCP pour se connecter à irc.voila.fr et qui join #info-help (portable win/linux compilé sous linux avec gcc et sous win avec dev-c++)
Code:

#include <stdio.h>
#include <string.h> //strstr
#include <fcntl.h> //close,
#include <unistd.h> //sleep,

#ifdef WIN32
#include <winsock.h>
#include <windows.h>

#else
#define closesocket(c) close(c)
#include <netinet/in.h> //sockaddr_in,inet_addr,
#include <sys/types.h> //socket,
#include <sys/socket.h> //socket,inet_addr,send,recv,
#include <arpa/inet.h> //inet_addr,
#include <sys/types.h> //send,recv,

#endif

int
  main()
{
/* on initialise la dll windows utilisé pour les socket */
#ifdef WIN32
WSADATA Data;
WSAStartup (MAKEWORD (2, 2), &Data);
#endif

  char nick[] = "NICK test_socket\nUSER Co2SoFt 0 0 :Co2SoFt\nJOIN :#info-help\n";

  int taille;

  char buffer[515];

  struct sockaddr_in sin;

  int sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

  sin.sin_addr.s_addr = inet_addr ("195.101.94.137");
  sin.sin_family = AF_INET;
  sin.sin_port = htons(6667);

  connect (sock, (struct sockaddr *) &sin, sizeof (struct sockaddr_in));

  send (sock, nick, strlen (nick), 0);

  while(1) {
     taille = recv(sock, buffer, sizeof(buffer), 0);
     buffer[taille]=0;// on ferme la chaine
     printf ("%s\n",buffer);
     if (strstr(buffer,":&quit\r\n")) break;
     }

  closesocket(sock);

#ifdef WIN32
WSACleanup();
#endif

return 0;
}



Il quittera le chan en tappan la commande "&quit" sur le channel.

Voila pour plus de détail google et les pages de manuel linux Wink
Si vous codez en c++ il ne vous reste plus qu'à faire une jolie class.
_________________
Co2SoFt
Revenir en haut
Publicité






MessagePosté le: Dim 7 Mai 2006 - 14:11    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    info-help Index du Forum -> Info-help -> Tutorial Toutes les heures sont au format GMT
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2017 phpBB Group
Traduction par : phpBB-fr.com