Accueil > > > FAIRE PASSER LE PARTAGE DE CONNEXION A SERTAIN SERVEUR (TCP ET UDP) (VC++)
FAIRE PASSER LE PARTAGE DE CONNEXION A SERTAIN SERVEUR (TCP ET UDP) (VC++)
Information sur la source
Description
Permet à sertain serveur (vnc) de passer le partage de connexion. Permet aussi d'analyser se qui s'echange entre le serveur et le client pour comprendre comment sertaine connexion fonctionne.
Source
- #include <stdio.h>
- #include <winsock2.h>
- #include <istream.h>
- #include <conio.h>
-
- SOCKET Sserv;
- SOCKET Sclient;
- SOCKET Satt;
-
- fd_set Ref;
- fd_set Test;
-
- SOCKADDR_IN sockaddrserv;
- SOCKADDR_IN sockaddrclient;
-
- char req_host[255];
- char buffer2[5000];
- char temp[1024];
- char *ip;
- char buffer[5000];
-
- struct hostent *host;
- struct in_addr **a;
-
- #pragma comment(lib,"ws2_32.lib")
-
-
- int sockaddrclientsize = sizeof (struct sockaddr_in);
- int clientmsgsize;
- int test;
- int port;
- int port_server;
- bool tcp;
-
- DWORD WINAPI recv_C (void*);
- unsigned long Theard_C;
-
-
- void main(int argc, char* argv[])
- {
- if(argc != 5)
- {
- printf("- Quelle protocole voulez vous utiliser (udp - tcp)\n");
- cin.getline(temp,1024);
- if(!strcmp(temp,"tcp"))
- {
- tcp = true;
- }
- else
- {
- if(!strcmp(temp,"udp"))
- {
- tcp = false;
- }
- else
- {
- printf("- Type inconnue (%s)\n",temp);
- printf("Appuyez sur une touche pour continuer...");
- getch();
- return;
- }
- }
-
- printf("- Entre l'host du serveur a se connecte\n");
- cin.getline(req_host,255);
-
- printf("- Entre le port du serveur a se connecte\n");
- scanf("%d",&port);
-
- printf("- Entre le port a cree sur ce pc\n");
- scanf("%d",&port_server);
- }
- else
- {
- if(!strcmp(argv[1],"tcp"))
- {
- tcp = true;
- }
- else
- {
- if(!strcmp(argv[1],"udp"))
- {
- tcp = false;
- }
- else
- {
- printf("- Type inconnue (%s)\n",argv[1]);
- printf("Appuyez sur une touche pour continuer...");
- getch();
- return;
- }
- }
- strcpy(req_host,argv[2]);
- port = atoi(argv[3]);
- port_server = atoi(argv[4]);
- }
-
- WSADATA wsa;
- WSAStartup(MAKEWORD(2,0),&wsa);
-
- if(host = gethostbyname(req_host))
- {
- for (a=(struct in_addr **)host->h_addr_list; *a; a++)
- {
- ip = inet_ntoa(**a);
- }
- }
-
- printf("** Attente du client pour se connecte au serveur (%s) sur le port (%d)\n\n",ip,port);
-
- sockaddrserv.sin_family=AF_INET;
- sockaddrserv.sin_addr.s_addr=INADDR_ANY;
- sockaddrserv.sin_port=htons(port_server);
-
- FD_ZERO(&Ref);
- FD_ZERO(&Test);
-
- if(tcp == true)
- {
- Sserv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- }
- else
- {
- Sserv = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
- }
- bind(Sserv,(SOCKADDR*)&sockaddrserv,sizeof(sockaddrserv));
-
- if(tcp == true)
- {
- listen(Sserv,0);
-
- FD_SET(Sserv,&Ref);
- Test = Ref;
-
- for(;;)
- {
- select(0,&Test,NULL,NULL,NULL);
-
- if(FD_ISSET(Sserv,&Test))
- {
- Satt = accept(Sserv,(struct sockaddr *)&sockaddrclient,&sockaddrclientsize);
- FD_SET(Satt,&Ref);
-
- printf("Client connecte\n");
- printf("** Connexion du programme a %s sur le port %d\n",ip,port);
-
-
-
- sockaddrclient.sin_family=AF_INET;
- sockaddrclient.sin_addr.s_addr=inet_addr(ip);
- sockaddrclient.sin_port=htons(port);
-
- Sclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
-
- if(connect(Sclient,(SOCKADDR*)&sockaddrclient,sizeof(sockaddrclient)))
- {
- printf("La connection a echoue\n");
- printf("Appuyez sur une touche pour continuer...");
- getch();
- return;
- }
- else
- {
- printf("La connection au serveur %s sur le port %d a reussi\n",ip,port);
- CreateThread(NULL,0,&recv_C,NULL,NULL,&Theard_C);
- }
- }
- else
- {
- clientmsgsize = recv(Test.fd_array[0],buffer,sizeof(buffer),0);
- if(clientmsgsize <= 0)
- {
- closesocket(Test.fd_array[0]);
- FD_CLR(Test.fd_array[0],&Ref);
- closesocket(Sclient);
- printf("Appuyez sur une touche pour continuer...");
- getch();
- return;
- }
- send(Sclient,buffer,clientmsgsize,0);
- }
- Test = Ref ;
- }
- }
- else
- {
- sockaddrclient.sin_family=AF_INET;
- sockaddrclient.sin_addr.s_addr=inet_addr(ip);
- sockaddrclient.sin_port=htons(port);
-
- Sclient=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
- CreateThread(NULL,0,&recv_C,NULL,NULL,&Theard_C);
-
- int sockaddrservsize=sizeof(sockaddrserv);
- for(;;)
- {
- clientmsgsize = recvfrom(Sserv,buffer,sizeof(buffer),0,(SOCKADDR*)&sockaddrserv,&sockaddrservsize);
- sendto(Sclient,buffer,clientmsgsize,0,(SOCKADDR*)&sockaddrclient,sizeof(sockaddrclient));
- }
- }
- }
-
-
- DWORD WINAPI recv_C (void*)
- {
- Sleep(500);
- if(tcp == true)
- {
- for(;;)
- {
- test = recv(Sclient,buffer2,sizeof(buffer2),0);
- if(test <= 0)
- {
- printf("\nConnexion perdu avec le serveur\n");
- FD_CLR(Satt,&Ref);
- closesocket(Satt);
- printf("Appuyez sur une touche pour continuer...");
- getch();
- exit(0);
- }
- send(Satt,buffer2,test,0);
- }
- }
- else
- {
- int sockaddrclientsize=sizeof(sockaddrclient);
- for(;;)
- {
- memset(buffer2,0,sizeof(buffer2));
- test = recvfrom(Sclient,buffer2,sizeof(buffer2),0,(SOCKADDR*)&sockaddrclient,&sockaddrclientsize);
- sendto(Sserv,buffer2,test,0,(SOCKADDR*)&sockaddrserv,sizeof(sockaddrserv));
- }
- }
- return TRUE;
- }
#include <stdio.h>
#include <winsock2.h>
#include <istream.h>
#include <conio.h>
SOCKET Sserv;
SOCKET Sclient;
SOCKET Satt;
fd_set Ref;
fd_set Test;
SOCKADDR_IN sockaddrserv;
SOCKADDR_IN sockaddrclient;
char req_host[255];
char buffer2[5000];
char temp[1024];
char *ip;
char buffer[5000];
struct hostent *host;
struct in_addr **a;
#pragma comment(lib,"ws2_32.lib")
int sockaddrclientsize = sizeof (struct sockaddr_in);
int clientmsgsize;
int test;
int port;
int port_server;
bool tcp;
DWORD WINAPI recv_C (void*);
unsigned long Theard_C;
void main(int argc, char* argv[])
{
if(argc != 5)
{
printf("- Quelle protocole voulez vous utiliser (udp - tcp)\n");
cin.getline(temp,1024);
if(!strcmp(temp,"tcp"))
{
tcp = true;
}
else
{
if(!strcmp(temp,"udp"))
{
tcp = false;
}
else
{
printf("- Type inconnue (%s)\n",temp);
printf("Appuyez sur une touche pour continuer...");
getch();
return;
}
}
printf("- Entre l'host du serveur a se connecte\n");
cin.getline(req_host,255);
printf("- Entre le port du serveur a se connecte\n");
scanf("%d",&port);
printf("- Entre le port a cree sur ce pc\n");
scanf("%d",&port_server);
}
else
{
if(!strcmp(argv[1],"tcp"))
{
tcp = true;
}
else
{
if(!strcmp(argv[1],"udp"))
{
tcp = false;
}
else
{
printf("- Type inconnue (%s)\n",argv[1]);
printf("Appuyez sur une touche pour continuer...");
getch();
return;
}
}
strcpy(req_host,argv[2]);
port = atoi(argv[3]);
port_server = atoi(argv[4]);
}
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
if(host = gethostbyname(req_host))
{
for (a=(struct in_addr **)host->h_addr_list; *a; a++)
{
ip = inet_ntoa(**a);
}
}
printf("** Attente du client pour se connecte au serveur (%s) sur le port (%d)\n\n",ip,port);
sockaddrserv.sin_family=AF_INET;
sockaddrserv.sin_addr.s_addr=INADDR_ANY;
sockaddrserv.sin_port=htons(port_server);
FD_ZERO(&Ref);
FD_ZERO(&Test);
if(tcp == true)
{
Sserv = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
}
else
{
Sserv = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
}
bind(Sserv,(SOCKADDR*)&sockaddrserv,sizeof(sockaddrserv));
if(tcp == true)
{
listen(Sserv,0);
FD_SET(Sserv,&Ref);
Test = Ref;
for(;;)
{
select(0,&Test,NULL,NULL,NULL);
if(FD_ISSET(Sserv,&Test))
{
Satt = accept(Sserv,(struct sockaddr *)&sockaddrclient,&sockaddrclientsize);
FD_SET(Satt,&Ref);
printf("Client connecte\n");
printf("** Connexion du programme a %s sur le port %d\n",ip,port);
sockaddrclient.sin_family=AF_INET;
sockaddrclient.sin_addr.s_addr=inet_addr(ip);
sockaddrclient.sin_port=htons(port);
Sclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(connect(Sclient,(SOCKADDR*)&sockaddrclient,sizeof(sockaddrclient)))
{
printf("La connection a echoue\n");
printf("Appuyez sur une touche pour continuer...");
getch();
return;
}
else
{
printf("La connection au serveur %s sur le port %d a reussi\n",ip,port);
CreateThread(NULL,0,&recv_C,NULL,NULL,&Theard_C);
}
}
else
{
clientmsgsize = recv(Test.fd_array[0],buffer,sizeof(buffer),0);
if(clientmsgsize <= 0)
{
closesocket(Test.fd_array[0]);
FD_CLR(Test.fd_array[0],&Ref);
closesocket(Sclient);
printf("Appuyez sur une touche pour continuer...");
getch();
return;
}
send(Sclient,buffer,clientmsgsize,0);
}
Test = Ref ;
}
}
else
{
sockaddrclient.sin_family=AF_INET;
sockaddrclient.sin_addr.s_addr=inet_addr(ip);
sockaddrclient.sin_port=htons(port);
Sclient=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
CreateThread(NULL,0,&recv_C,NULL,NULL,&Theard_C);
int sockaddrservsize=sizeof(sockaddrserv);
for(;;)
{
clientmsgsize = recvfrom(Sserv,buffer,sizeof(buffer),0,(SOCKADDR*)&sockaddrserv,&sockaddrservsize);
sendto(Sclient,buffer,clientmsgsize,0,(SOCKADDR*)&sockaddrclient,sizeof(sockaddrclient));
}
}
}
DWORD WINAPI recv_C (void*)
{
Sleep(500);
if(tcp == true)
{
for(;;)
{
test = recv(Sclient,buffer2,sizeof(buffer2),0);
if(test <= 0)
{
printf("\nConnexion perdu avec le serveur\n");
FD_CLR(Satt,&Ref);
closesocket(Satt);
printf("Appuyez sur une touche pour continuer...");
getch();
exit(0);
}
send(Satt,buffer2,test,0);
}
}
else
{
int sockaddrclientsize=sizeof(sockaddrclient);
for(;;)
{
memset(buffer2,0,sizeof(buffer2));
test = recvfrom(Sclient,buffer2,sizeof(buffer2),0,(SOCKADDR*)&sockaddrclient,&sockaddrclientsize);
sendto(Sserv,buffer2,test,0,(SOCKADDR*)&sockaddrserv,sizeof(sockaddrserv));
}
}
return TRUE;
}
Conclusion
On execute le programme sur le pc qui a la connexion internet, il attend la connexion d'un client sur le port configuré pour se connecté au serveur configuré (sur un pc du reseau local).
Historique
- 29 novembre 2005 17:54:31 :
- .
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Socket TCP/UDP [ par hobbes ]
Bonjour,j ai cru comprendre qu il existe 2 types de sockets (TCP et UDP) pouvant permettre l echange de donnees entre 2 applications sur le reseau.Pou
Erreur 10049 sur socket UDP [ par Ezekiel69 ]
Salut tous le monde...Me voici depuis plusieurs jour confronté un a problème étrange.Je veux envoyer un message par l'intermédiaire d'un packet UDP su
Thread et socket udp [ par eurysthe ]
Bonjour !!Voila j'ai un petit problème de thread qui me pourrit la vie.J'ai crée un thread qui doit écouter en boucle les informations qui transite su
Problème de socket UDP sous linux [ par RaygKross ]
Salut à tousMon problème est je dois créer un programme manager snmpLes port de SNMP sont 161 et 162J'initialise ma structure de type sockaddr_in avec
Lire une reponse UDP dans une socket [ par topl ]
bonjour,Je crée un petit prog qui envoi une requete à un serveur dns afin de resoudre le nom tel que "www.yahoo.com".Seulement lorsque je fais un rec
Problème UDP [ par ToToL ]
BonjoursJe me suis attaquer il y a peut de temps au socket UDP ( aparament plus rapide que le tcp ) et j'ai un petit souci : je n'arrive pas ds le mem
socket tcp/ip en C [ par ravat485 ]
qui peut m'aider par un exemple d'utilisation de socket en C (TCP/IP),pour envoyer des donnees???
recvfrom + udp + '\n' [ par vegetaline ]
salutune appli client / serveur sous linux qui communique (enfin qui essaye) avec des sockets INTERNET en mode NON CONNECTE (en udp :)pb -> le recv
Raw Socket -> TCP/IP [ par krum ]
Voila plus d'une semaine que je fouille/cherche sur les moteurs de recherches,les forums ..des sources,des tutos,des papers sur les raw sockets (sous
Problème fermeture socket [ par alexixlebaulois ]
Salut,Je suis en train de créer une appli qui communique avec plusieurs serveurs pour récupérer leur état. Toutes les communications se font en même t
|
Derniers Blogs
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 [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CXIMAGERE : CXIMAGE par rt15
Cliquez pour lire la suite par rt15
Logiciels
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 COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.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 LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|