Client/serveur: utilisation des sockets
Résolu
poparnassus
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
-
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai programmer une interface graphique pour piloter un robot, maintenant j'ai besoin d'un coup de main sur l'utilisation des sockets.
https://forums.commentcamarche.net/forum/affich-33386197-sdl2-code-block-gestion-evenement-creation-de-surface#p33417566
Ceci est la partie client, je souhaiterai quelque commentaire sur son fonctionnement,
notament sur
Es que se sont des structures propres au librairie inclue ?
j'ai effectuer des tests mais je pige pas trop.
source= http://sylvainmarechal.chez-alice.fr/prog/unix-win32/socket/tcp/send.c
J'ai programmer une interface graphique pour piloter un robot, maintenant j'ai besoin d'un coup de main sur l'utilisation des sockets.
https://forums.commentcamarche.net/forum/affich-33386197-sdl2-code-block-gestion-evenement-creation-de-surface#p33417566
Ceci est la partie client, je souhaiterai quelque commentaire sur son fonctionnement,
notament sur
struct sockaddr_in addr; struct sockaddr addrRet; struct hostent FAR *lphost ;
Es que se sont des structures propres au librairie inclue ?
j'ai effectuer des tests mais je pige pas trop.
source= http://sylvainmarechal.chez-alice.fr/prog/unix-win32/socket/tcp/send.c
///////////////////////////////////////////////////////////////////////////// // Creation 11/12/2003 // // // SEND.C // ------ // // // Sylvain MARECHAL - sylvain.marechal1@libertysurf.fr ///////////////////////////////////////////////////////////////////////////// // // Simple client // Usage: send localhost 1234 // ///////////////////////////////////////////////////////////////////////////// #ifdef _WIN32 #include <winsock2.h> #define SOCKET_ERRNO WSAGetLastError() #define ERRNO GetLastError() #else #define SOCKET_ERRNO errno #define ERRNO errno #define closesocket close #endif #include <io.h> #include <fcntl.h> #include <stdio.h> #include <conio.h> #include <errno.h> #include <string.h> ///////////////////////////////////////////////////////////////////////////// // // SOCKADDR TCPFORMATADRESS ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --sockaddr TcpFormatAdress-- // ARGUMENTS // Argument1: char * host // Argument2: u_short port // RETOUR/RESULTAT // static struct // REMARQUE // Rev 11/12/2003 ////////////////////////////////////////////////////////////////////////////// static struct sockaddr TcpFormatAdress( char * host, u_short port ) { struct sockaddr_in addr; struct sockaddr addrRet; struct hostent FAR *lphost ; u_long IP; memset((char*)&addr, 0, sizeof(addr)); /* Soit on fournit une adresse IP, soit on fournit un nom */ if ((IP = inet_addr(host)) == (u_long)INADDR_NONE) { if ((lphost = gethostbyname(host))==NULL) { memset( (char * )&addrRet, 0, sizeof(addrRet) ); return addrRet; } addr.sin_family = lphost->h_addrtype; #ifdef _WIN16 /* A définir dans le projet WIN16 */ _fmemcpy (&addr.sin_addr, lphost->h_addr, lphost->h_length); #else /* WIN32, UNIX*/ memcpy (&addr.sin_addr, lphost->h_addr, lphost->h_length); #endif } else { addr.sin_family = AF_INET; addr.sin_addr.s_addr = IP; } /* Port destination */ addr.sin_port = htons((u_short)port ); memcpy( (char *)&addrRet, (char *)&addr, sizeof(addrRet) ); return addrRet; } ///////////////////////////////////////////////////////////////////////////// // // MAIN ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --main-- // // Usage: send localhost 1234 // // ARGUMENTS // Argument1: int argc // Argument2: char ** argv The address where to connect // RETOUR/RESULTAT // int // REMARQUE // Rev 11/12/2003 ////////////////////////////////////////////////////////////////////////////// int main( int argc, char ** argv ) { SOCKET hSocket; struct sockaddr_in addr; int len = sizeof(addr); struct sockaddr addrConnect; char BufSend[] = "coucou"; int cb; char BufRecv[1024]; int nPort; char * pszHost; // Initialize winsock WSADATA stack_info ; WSAStartup(MAKEWORD(2,0), &stack_info) ; if( argc != 3 ) { printf( "Usage: <%s> <host> <port>\n", argv[0] ); pszHost = "127.0.0.1"; nPort = 2000; } else { pszHost = argv[1]; nPort = atoi(argv[2]); } printf( "Connecting to %s:%d\n", pszHost, nPort ); /* socket TCP */ hSocket = socket( PF_INET, SOCK_STREAM, 0 ); if( hSocket == INVALID_SOCKET ) { printf( "socket() error (%d)\n", SOCKET_ERRNO ); return -1; } /* bind */ addr.sin_family = AF_INET ; addr.sin_addr.s_addr = htonl (INADDR_ANY); addr.sin_port = htons ((unsigned short)0 ); if ( bind( hSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR ) { printf( "socket() error (%d)\n", SOCKET_ERRNO ); return -1; } /* Transform the host/port into a struct sockaddr*/ addrConnect = TcpFormatAdress( pszHost, (u_short)nPort ); /* blocking mode */ if( connect( hSocket, &addrConnect, sizeof(addrConnect) ) == SOCKET_ERROR ) { printf( "connect() error (%d)\n", SOCKET_ERRNO ); return -1; } cb = send( hSocket, BufSend, sizeof(BufSend), 0 ); //closesocket( hSocket ); //Sleep( INFINITE ); cb = recv( hSocket, BufRecv, sizeof(BufRecv), 0 ); printf( "Data received:'%s'\n", BufRecv ); /* Wait to see*/ Sleep( INFINITE ); return 0; }
A voir également:
- Client/serveur: utilisation des sockets
- Cybera client - Télécharger - Divers Réseau & Wi-Fi
- Changer serveur dns - Guide
- Filezilla client - Télécharger - Téléchargement & Transfert
- Filezilla client ou serveur ✓ - Forum Réseau
- Formate pour taxer client frigo vide ✓ - Forum Matériel & Système
3 réponses
On premier lieu j'aimerai comprendre comment on établi la connexion sur une adresse ip donc sur mon serveur
http://sylvainmarechal.chez-alice.fr/prog/unix-win32/socket/tcp/recv.c
ici le programme serveur, mais je n'arrive pas à les faire communiquer si quelqun peut m'aider ! svp :-)
ici le programme serveur, mais je n'arrive pas à les faire communiquer si quelqun peut m'aider ! svp :-)
Usage: <C:\Users\Nico\Desktop\Projet C\socket_client\bin\Debug\socket.exe> <host
> <port>
Connecting to 127.0.0.1:2000
connect() error (10061)
Process returned -1 (0xFFFFFFFF) execution time : 1.221 s
Press any key to continue.
Quand je compile le script serveur, je pige pas il devrais rester dans une boucle en attendant de recevoir des datas NON ?
> <port>
Connecting to 127.0.0.1:2000
connect() error (10061)
Process returned -1 (0xFFFFFFFF) execution time : 1.221 s
Press any key to continue.
Quand je compile le script serveur, je pige pas il devrais rester dans une boucle en attendant de recevoir des datas NON ?
Alors mes 2 programmes complie mais ne comunique pas, si je lance le debug.exe du serveur, il se lance est attend une connexion,
et quand je lance le client il essaye de se connecter, il reste dans une boucle infini mais rien ne se passe, alors que je devrais receboir le
Je comprends pas pourquoi je ne recoi pas "coucou" , de plus dans le code du serveur, il est specifier un port mais pas d'adresse IP, es que le serveur ecoute seulement sur un port sans se preoccuper d'ou viens le paquet.
et quand je lance le client il essaye de se connecter, il reste dans une boucle infini mais rien ne se passe, alors que je devrais receboir le
char BufSend[] = "coucou";de la ligne 109.
Je comprends pas pourquoi je ne recoi pas "coucou" , de plus dans le code du serveur, il est specifier un port mais pas d'adresse IP, es que le serveur ecoute seulement sur un port sans se preoccuper d'ou viens le paquet.