Accueil > > > EXEMPLE DE CONNEXION CLIENT-SERVEUR TCP
EXEMPLE DE CONNEXION CLIENT-SERVEUR TCP
Information sur la source
Description
Voici un code documenté afin de donner un exemple simple d'utilisation des socket via Tcp. Que cela soit en mode client ou serveur. Le code, l'exe et surtout la documentation se trouvent à l'adresse suivante : http://www.frameip.com/c_mode_connecte/ _SebF http://www.frameip.com Un site pour les spécialistes IP
Source
- Code client :
- ----------------
-
- // ********************************************
- // Nom du code : envoi_tcp.cpp
- // Auteur : _SebF AT frameIP.com
- // date de création : 10 juin 2004
- // version : 1.0
- // Licence : Ce code est libre de toute utilisation.
- // La seule condition existante est de faire référence au site http://www.frameip.com afin de respecter le travail d'autrui.
- // ********************************************
-
- // ********************************************************
- // Les includes
- // ********************************************************
- #include <winsock2.h> // pour les fonctions socket
- #include <cstdio> // Pour les Sprintf
-
- // ********************************************************
- // Les librairies
- // ********************************************************
- #pragma comment(lib,"ws2_32.lib")
-
- // ********************************************************
- // Définition des variables
- // ********************************************************
-
- WSADATA initialisation_win32; // Variable permettant de récupérer la structure d'information sur l'initialisation
- int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
- int tempo; // Variable temporaire de type int
- int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
- char buffer[65535]; // Tampon contennant les données reçues ou envoyées
- SOCKET id_de_la_socket; // Identifiant de la socket
- SOCKADDR_IN information_sur_la_destination; // Déclaration de la structure des informations lié au serveur
-
- int main (int argc, char* argv[])
- {
- printf("\nBonjour, vous etes du cote client. www.frameip.com\n");
-
- // ********************************************************
- // Initialisation de Winsock
- // ********************************************************
- erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
- if (erreur!=0)
- printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nWSAStartup : OK");
-
- // ********************************************************
- // Ouverture d'une Socket
- // ********************************************************
- id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
- if (id_de_la_socket==INVALID_SOCKET)
- printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
- else
- printf("\nsocket : OK");
-
- // ********************************************************
- // Activation de l'option permettant d'activer l'algorithme de Nagle
- // ********************************************************
- tempo=1;
- erreur=setsockopt(id_de_la_socket,IPPROTO_TCP,TCP_NODELAY,(char *)&tempo,sizeof(tempo));
- if (erreur!=0)
- printf("\nDesole, je ne peux pas configurer cette options du à l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nsetsockopt : OK");
-
- // ********************************************************
- // Etablissement de l'ouverture de session
- // ********************************************************
- information_sur_la_destination.sin_family=AF_INET;
- information_sur_la_destination.sin_addr.s_addr=inet_addr("10.10.10.10"); // Indiquez l'adresse IP de votre serveur
- information_sur_la_destination.sin_port=htons(33333); // Port écouté du serveur (33333)
- erreur=connect(id_de_la_socket,(struct sockaddr*)&information_sur_la_destination,sizeof(information_sur_la_destination));
- if (erreur!=0)
- printf("\nDesole, je n'ai pas pu ouvrir la session TCP : %d %d",erreur,WSAGetLastError());
- else
- printf("\nsetsockopt : OK");
-
- // ********************************************************
- // Envoi des données
- // ********************************************************
- strcpy(buffer,"Coucou, je suis les donnees. www.frameip.com"); // Copie la chaine de caractère dans buffer
- nombre_de_caractere=send(id_de_la_socket,buffer,strlen(buffer),0);
- if (nombre_de_caractere==SOCKET_ERROR)
- printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
- else
- printf("\nsend : OK");
-
- // ********************************************************
- // Fermeture de la session TCP Correspondant à la commande connect()
- // ********************************************************
- erreur=shutdown(id_de_la_socket,2); // 2 signifie socket d'émission et d'écoute
- if (erreur!=0)
- printf("\nDesole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nshutdown : OK");
-
- // ********************************************************
- // Fermeture de la socket correspondant à la commande socket()
- // ********************************************************
- erreur=closesocket(id_de_la_socket);
- if (erreur!=0)
- printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nclosesocket : OK");
-
- // ********************************************************
- // Quitte proprement le winsock ouvert avec la commande WSAStartup
- // ********************************************************
- erreur=WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
- if (erreur!=0)
- printf("\nDesole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nWSACleanup : OK");
- }
-
- Code serveur :
- ------------------
-
- // ********************************************
- // Nom du code : ecoute_tcp.cpp
- // Auteur : _SebF AT frameIP.com
- // date de création : 10 juin 2004
- // version : 1.0
- // Licence : Ce code est libre de toute utilisation.
- // La seule condition existante est de faire référence au site http://www.frameip.com afin de respecter le travail d'autrui.
- // ********************************************
-
- // ********************************************************
- // Les includes
- // ********************************************************
- #include <winsock2.h> // pour les fonctions socket
- #include <cstdio> // Pour les Sprintf
-
- // ********************************************************
- // Les librairies
- // ********************************************************
- #pragma comment(lib,"ws2_32.lib")
-
- // ********************************************************
- // Définition des variables
- // ********************************************************
- WSADATA initialisation_win32; // Variable permettant de récupérer la structure d'information sur l'initialisation
- int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
- int tempo; // Variable temporaire de type int
- int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
- char buffer[65535]; // Tampon contenant les données reçues ou envoyées
- SOCKET id_de_la_socket; // Identifiant de la socket
- SOCKET id_de_la_nouvelle_socket; // Identifiant de la nouvelle socket
- SOCKADDR_IN information_sur_la_source; // Déclaration de la structure des informations lié à l'écoute
-
- int main (int argc, char* argv[])
- {
- printf("\nBonjour, vous etes du cote serveur. www.frameip.com\n");
-
- // ********************************************************
- // Initialisation de Winsock
- // ********************************************************
- erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
- if (erreur!=0)
- printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nWSAStartup : OK");
-
- // ********************************************************
- // Ouverture d'une Socket
- // ********************************************************
- id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
- if (id_de_la_socket==INVALID_SOCKET)
- printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
- else
- printf("\nsocket : OK");
-
- // ********************************************************
- // Activation de l'option permettant d'activer l'algorithme de Nagle
- // ********************************************************
- tempo=1;
- erreur=setsockopt(id_de_la_socket,IPPROTO_TCP,TCP_NODELAY,(char *)&tempo,sizeof(tempo));
- if (erreur!=0)
- printf("\nDesole, je ne peux pas configurer cette options du à l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nsetsockopt : OK");
-
- // ********************************************************
- // Lie la socket à une ip et un port d'écoute
- // ********************************************************
- information_sur_la_source.sin_family=AF_INET;
- information_sur_la_source.sin_addr.s_addr=INADDR_ANY; // Ecoute sur toutes les IP locales
- information_sur_la_source.sin_port=htons(33333); // Ecoute sur le port 33333
- erreur=bind(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source));
- if (erreur!=0)
- printf("\nDesole, je ne peux pas ecouter ce port : %d %d",erreur,WSAGetLastError());
- else
- printf("\nbind : OK");
-
- // ********************************************************
- // Attente d'ouverture de session
- // ********************************************************
- erreur=99; // Initiation de erreur pour être sur que l'on va rentrer dans la boucle
- while(erreur!=0) // Boucle tant qu'une demande de session (SYN) tcp n'a pas été reçu
- erreur=listen(id_de_la_socket,1);
- printf("\nlisten : OK");
-
- // ********************************************************
- // Acceptation de la demande d'ouverture de session
- // ********************************************************
- printf("\nAttente de la reception de demande d'ouverture de session tcp (SYN)");
- tempo=sizeof(information_sur_la_source); // Passe par une variable afin d'utiliser un pointeur
- id_de_la_nouvelle_socket=accept(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,&tempo);
- if(id_de_la_nouvelle_socket==INVALID_SOCKET)
- printf("\nDesole, je ne peux pas accepter la session TCP du a l'erreur : %d",WSAGetLastError());
- else
- printf("\naccept : OK");
-
- // ********************************************************
- // Reception des données
- // ********************************************************
- nombre_de_caractere=recv(id_de_la_nouvelle_socket,buffer,1515,0);
- if (nombre_de_caractere==SOCKET_ERROR)
- printf("\nDesole, je n'ai pas recu de donnee");
- else
- {
- buffer[nombre_de_caractere]=0; // Permet de fermer le tableau après le contenu des data, car la fonction recv ne le fait pas
- printf("\nVoici les donnees : %s",buffer);
- }
-
- // ********************************************************
- // Fermeture de la session TCP Correspondant à la commande connect()
- // ********************************************************
- erreur=shutdown(id_de_la_nouvelle_socket,2); // 2 signifie socket d'émission et d'écoute
- if (erreur!=0)
- printf("\nDesole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nshutdown : OK");
-
- // ********************************************************
- // Fermeture des deux socket correspondant à la commande socket() et accept()
- // ********************************************************
- erreur=closesocket(id_de_la_nouvelle_socket);
- if (erreur!=0)
- printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nclosesocket : OK");
-
- erreur=closesocket(id_de_la_socket);
- if (erreur!=0)
- printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nclosesocket : OK");
-
- // ********************************************************
- // Quitte proprement le winsock ouvert avec la commande WSAStartup
- // ********************************************************
- erreur=WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
- if (erreur!=0)
- printf("\nDesole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
- else
- printf("\nWSACleanup : OK");
- }
Code client :
----------------
// ********************************************
// Nom du code : envoi_tcp.cpp
// Auteur : _SebF AT frameIP.com
// date de création : 10 juin 2004
// version : 1.0
// Licence : Ce code est libre de toute utilisation.
// La seule condition existante est de faire référence au site http://www.frameip.com afin de respecter le travail d'autrui.
// ********************************************
// ********************************************************
// Les includes
// ********************************************************
#include <winsock2.h> // pour les fonctions socket
#include <cstdio> // Pour les Sprintf
// ********************************************************
// Les librairies
// ********************************************************
#pragma comment(lib,"ws2_32.lib")
// ********************************************************
// Définition des variables
// ********************************************************
WSADATA initialisation_win32; // Variable permettant de récupérer la structure d'information sur l'initialisation
int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
int tempo; // Variable temporaire de type int
int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
char buffer[65535]; // Tampon contennant les données reçues ou envoyées
SOCKET id_de_la_socket; // Identifiant de la socket
SOCKADDR_IN information_sur_la_destination; // Déclaration de la structure des informations lié au serveur
int main (int argc, char* argv[])
{
printf("\nBonjour, vous etes du cote client. www.frameip.com\n");
// ********************************************************
// Initialisation de Winsock
// ********************************************************
erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
if (erreur!=0)
printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nWSAStartup : OK");
// ********************************************************
// Ouverture d'une Socket
// ********************************************************
id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
if (id_de_la_socket==INVALID_SOCKET)
printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
else
printf("\nsocket : OK");
// ********************************************************
// Activation de l'option permettant d'activer l'algorithme de Nagle
// ********************************************************
tempo=1;
erreur=setsockopt(id_de_la_socket,IPPROTO_TCP,TCP_NODELAY,(char *)&tempo,sizeof(tempo));
if (erreur!=0)
printf("\nDesole, je ne peux pas configurer cette options du à l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nsetsockopt : OK");
// ********************************************************
// Etablissement de l'ouverture de session
// ********************************************************
information_sur_la_destination.sin_family=AF_INET;
information_sur_la_destination.sin_addr.s_addr=inet_addr("10.10.10.10"); // Indiquez l'adresse IP de votre serveur
information_sur_la_destination.sin_port=htons(33333); // Port écouté du serveur (33333)
erreur=connect(id_de_la_socket,(struct sockaddr*)&information_sur_la_destination,sizeof(information_sur_la_destination));
if (erreur!=0)
printf("\nDesole, je n'ai pas pu ouvrir la session TCP : %d %d",erreur,WSAGetLastError());
else
printf("\nsetsockopt : OK");
// ********************************************************
// Envoi des données
// ********************************************************
strcpy(buffer,"Coucou, je suis les donnees. www.frameip.com"); // Copie la chaine de caractère dans buffer
nombre_de_caractere=send(id_de_la_socket,buffer,strlen(buffer),0);
if (nombre_de_caractere==SOCKET_ERROR)
printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
else
printf("\nsend : OK");
// ********************************************************
// Fermeture de la session TCP Correspondant à la commande connect()
// ********************************************************
erreur=shutdown(id_de_la_socket,2); // 2 signifie socket d'émission et d'écoute
if (erreur!=0)
printf("\nDesole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nshutdown : OK");
// ********************************************************
// Fermeture de la socket correspondant à la commande socket()
// ********************************************************
erreur=closesocket(id_de_la_socket);
if (erreur!=0)
printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nclosesocket : OK");
// ********************************************************
// Quitte proprement le winsock ouvert avec la commande WSAStartup
// ********************************************************
erreur=WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
if (erreur!=0)
printf("\nDesole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nWSACleanup : OK");
}
Code serveur :
------------------
// ********************************************
// Nom du code : ecoute_tcp.cpp
// Auteur : _SebF AT frameIP.com
// date de création : 10 juin 2004
// version : 1.0
// Licence : Ce code est libre de toute utilisation.
// La seule condition existante est de faire référence au site http://www.frameip.com afin de respecter le travail d'autrui.
// ********************************************
// ********************************************************
// Les includes
// ********************************************************
#include <winsock2.h> // pour les fonctions socket
#include <cstdio> // Pour les Sprintf
// ********************************************************
// Les librairies
// ********************************************************
#pragma comment(lib,"ws2_32.lib")
// ********************************************************
// Définition des variables
// ********************************************************
WSADATA initialisation_win32; // Variable permettant de récupérer la structure d'information sur l'initialisation
int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
int tempo; // Variable temporaire de type int
int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
char buffer[65535]; // Tampon contenant les données reçues ou envoyées
SOCKET id_de_la_socket; // Identifiant de la socket
SOCKET id_de_la_nouvelle_socket; // Identifiant de la nouvelle socket
SOCKADDR_IN information_sur_la_source; // Déclaration de la structure des informations lié à l'écoute
int main (int argc, char* argv[])
{
printf("\nBonjour, vous etes du cote serveur. www.frameip.com\n");
// ********************************************************
// Initialisation de Winsock
// ********************************************************
erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
if (erreur!=0)
printf("\nDesole, je ne peux pas initialiser Winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nWSAStartup : OK");
// ********************************************************
// Ouverture d'une Socket
// ********************************************************
id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
if (id_de_la_socket==INVALID_SOCKET)
printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
else
printf("\nsocket : OK");
// ********************************************************
// Activation de l'option permettant d'activer l'algorithme de Nagle
// ********************************************************
tempo=1;
erreur=setsockopt(id_de_la_socket,IPPROTO_TCP,TCP_NODELAY,(char *)&tempo,sizeof(tempo));
if (erreur!=0)
printf("\nDesole, je ne peux pas configurer cette options du à l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nsetsockopt : OK");
// ********************************************************
// Lie la socket à une ip et un port d'écoute
// ********************************************************
information_sur_la_source.sin_family=AF_INET;
information_sur_la_source.sin_addr.s_addr=INADDR_ANY; // Ecoute sur toutes les IP locales
information_sur_la_source.sin_port=htons(33333); // Ecoute sur le port 33333
erreur=bind(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source));
if (erreur!=0)
printf("\nDesole, je ne peux pas ecouter ce port : %d %d",erreur,WSAGetLastError());
else
printf("\nbind : OK");
// ********************************************************
// Attente d'ouverture de session
// ********************************************************
erreur=99; // Initiation de erreur pour être sur que l'on va rentrer dans la boucle
while(erreur!=0) // Boucle tant qu'une demande de session (SYN) tcp n'a pas été reçu
erreur=listen(id_de_la_socket,1);
printf("\nlisten : OK");
// ********************************************************
// Acceptation de la demande d'ouverture de session
// ********************************************************
printf("\nAttente de la reception de demande d'ouverture de session tcp (SYN)");
tempo=sizeof(information_sur_la_source); // Passe par une variable afin d'utiliser un pointeur
id_de_la_nouvelle_socket=accept(id_de_la_socket,(struct sockaddr*)&information_sur_la_source,&tempo);
if(id_de_la_nouvelle_socket==INVALID_SOCKET)
printf("\nDesole, je ne peux pas accepter la session TCP du a l'erreur : %d",WSAGetLastError());
else
printf("\naccept : OK");
// ********************************************************
// Reception des données
// ********************************************************
nombre_de_caractere=recv(id_de_la_nouvelle_socket,buffer,1515,0);
if (nombre_de_caractere==SOCKET_ERROR)
printf("\nDesole, je n'ai pas recu de donnee");
else
{
buffer[nombre_de_caractere]=0; // Permet de fermer le tableau après le contenu des data, car la fonction recv ne le fait pas
printf("\nVoici les donnees : %s",buffer);
}
// ********************************************************
// Fermeture de la session TCP Correspondant à la commande connect()
// ********************************************************
erreur=shutdown(id_de_la_nouvelle_socket,2); // 2 signifie socket d'émission et d'écoute
if (erreur!=0)
printf("\nDesole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nshutdown : OK");
// ********************************************************
// Fermeture des deux socket correspondant à la commande socket() et accept()
// ********************************************************
erreur=closesocket(id_de_la_nouvelle_socket);
if (erreur!=0)
printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nclosesocket : OK");
erreur=closesocket(id_de_la_socket);
if (erreur!=0)
printf("\nDesole, je ne peux pas liberer la socket du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nclosesocket : OK");
// ********************************************************
// Quitte proprement le winsock ouvert avec la commande WSAStartup
// ********************************************************
erreur=WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
if (erreur!=0)
printf("\nDesole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
else
printf("\nWSACleanup : OK");
}
Conclusion
Le code, l'exe et surtout la documentation se trouvent à l'adresse suivante :
http://www.frameip.com/c_mode_connecte/
_SebF http://www.frameip.com Un site pour les spécialistes IP
Fichier Zip
Historique
- 22 juillet 2004 20:13:54 :
- Changement du titre
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|