Utiliser GNet
Date de publication : 04/09/07 , Date de mise à jour : 03/10/07
III. Découverte
III-A. Configuration
III-A-1. Avec codeBlocks
III-B. Notre premier projet
III-C. Tour d'horizon
III-C-1. Les InetAddr
III-C-2. Les TCP sockets
III-C-3. Les UDP sockets
III. Découverte
III-A. Configuration
A présent il faut configurer votre EDI ou votre compilateur pour pouvoir réaliser des progr mmes utilisant GNet.
pour cela, c'est très simple, il vous suffit d'ajouter cette option :
|
`pkg-config gnet-2.0 --cflags --libs`
|
Si vous compilez directement avec GCC c'est simple.
III-A-1. Avec codeBlocks
Cliquez sur New->Project, ensuite Console Application nommé votre projet GNetApp.
Ensuite, Allez dans le menu Project->Buil Options, dans l'onglet Compilers, puis dans la zone de texte du sous onglet Other Options, tapez :
`pkg-config gnet --cflags --libs`
|
Puis dans le fichier main.c tapez :
# include <stdlib.h>
# include <stdio.h>
# include <gnet.h>
int main (int argc, char * argv[])
{
printf (" Hello Word !\n " );
}
|
Si vous programmez en C++, créez un projet C++ et remplacez printf par cout puis incluez cstdlib et iostream à la place de stdlib.h et stdio.h.
Ensuite cliquez sur File->Save as user template, renseignez les informations demandés et c'est bon !
A présent lorsque vous voudrez créer un projet tout prêt configuré pour être utilisés avec GNet, il vous suffira de cliquez sur : New->Project, ensuite dans la partie User's template, cliquez sur le nom sous lequel vous avez enregistré votre projet tout à l'heure, et votre projet se créra tout prêt et configuré.
III-B. Notre premier projet
A prèsent nous allons créer notre premier projet avec GNet, si vous utilisez codeblocks créé un projet en utilisant le user's template que vous avez fait tout à l'heure, sinon rajoutez simplement :
|
`pkg-config gnet --cflags --libs`
|
dans les options du compilateur.
Pour commencer, il faut initialiser GNet en utilisant la fonction gnet_init dont voici le prototype :
Cet appel doit précéder tout appels aux fonctions de GNet et si vous utilisez GTK, cet appel doit aussi précéder l'appel à gtk_init(int argc, char** argv).
Voilà notre premier projet avec GNet !
Bon certe, il ne fait rien, mais c'est un début et tout apprentissage doit avoir un début(mais pas de fin ^^). Passons à la suite.
III-C. Tour d'horizon
Je vous propose à présent un petit tour d'horizon des possiblitées de GNet pour clore la partie découverte, après quoi nous entammerons l'apprentissage proprement dit.
III-C-1. Les InetAddr
Les InetAddr(Internet Address) représentent des adresses internet, créez une InetAddr avec :
GInetAddr* gnet_inetaddr_new (const gchar * serveur, gint port);
|
Il faut assigner la valeur de retour à un pointeur de type GInetAddr, et récupérer la valeur de retour, si c'est NULL, il y a eu une erreur :
GInetAddr* InternetAdress = gnet_inetaddr_new (const gchar * serveur, gint port);
if (InternetAdress = = NULL )
{
printf (" Erreur d'initialisation !\n " );
}
|
Nous reviendrons sur les InetAddr, mais comme il s'agit uniquement d'un tour d'horizon, nous n'allons pas nous attarder dessus.
III-C-2. Les TCP sockets
TCP est un protocole internet interne pour transférer les données de manière sur et dans le bon ordre, GNet fourni des TCP Sockets, les GTcpSocket !
Pour créer un GTcpSocket, on utilise la fonction :
GTcpSocket* gnet_tcp_socket_new (const GInetAddr* addresse);
|
Elle prend en paramètre un pointeur sur une GInetAddr que vous avez du créer précédement, de même il faut tester la valeur de retour :
const GInetAddr* InternetAdress = gnet_inetaddr_new (const gchar * serveur, gint port);
if (InternetAdress = = NULL )
{
printf (" Erreur d'initialisation !\n " );
}
GTcpSocket* TCPSocket = gnet_tcp_socket_new (InternetAddress);
if (TCPSocket = = NULL )
{
printf (" Erreur de connexion !\n " );
}
|
Une fois de plus ce n'est qu'un aperçu, nous reviendrons plus tard sur les GTcpSocket.
III-C-3. Les UDP sockets
GNet fourni aussi un support pour les sockets UDP. UDP est un protocole internet interne pour transfèrer les paquets plus rapidement, mais les paquets peuvent arriver dans le désordre(c'est même souvent le cas). Utilisez plutôt TCP si votre programme requiert une transmission de qualité et fiable.
Ce fameux support pour les Sockets UDP est GUdpSocket, pour créer un socket UDP vous avez trois fonction :
GUdpSocket* gnet_udp_socket_new (void );
GUdpSocket* gnet_udp_socket_new_with_port (gint port);
GUdpSocket* gnet_udp_socket_new_full (const GInetAddr * iface, gint port);
|
La première créé un socket UDP complétement inutile(mais nous y reviendrons), la deuxième créé un socket UDP avec un port, et la troisième créé un socket UDP complet. Il faut toujours tester la valeur de retour qui pour toutes les fonctions est NULL en cas d'erreur.
Nous reviendrons aussi sur les sockets UDP.
Ce n'étais qu'un apperçu des possibilitées de GNet, nous réetudierons tout cela plus sérieusement dans le paragraphe suivant.