dadex85 merci a tous | bonjour a tous
je souhaite transmettre les data d'un transmetteur à mon server . Mais j'ai un soucis j'arrive a connecté le transmetteur au serveur mais les data n'arrive pas
voici ce que j'ai eu jusque la:
Code :
- #include "stdafx.h"
- #pragma comment(lib,"ws2_32.lib" )
- /**==================[ Si Windows ]================**/
- #if defined (WIN32)
- #include <winsock2.h>
- /**================[ Si Gnu/Linux ]================**/
- #elif defined (linux)
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #define INVALID_SOCKET -1
- #define SOCKET_ERROR -1
- #define closesocket(s) close (s)
- typedef int SOCKET;
- typedef struct sockaddr_in SOCKADDR_IN;
- typedef struct sockaddr SOCKADDR;
- /**===============[ Si Autre Systems ]==============**/
- #else
- #error not defined for this platform
- #endif /**========[ Fin teste portabilite' ]========**/
- /* Inclure les fichiers d'en-tete dont on a besoin */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define DEBUG 0 /** Aclive: 1, Desactive: 0 **/
- #define SERVER_PORT_LISTENING 10002
- int App (void);
- int ConnectWithClient ( SOCKET*, SOCKET* );
- int CommunicatWithClient ( SOCKET );
- int RecvData ( SOCKET socket, char *data );
- /**************************************************************************
- * Fonction main():
- * La fonction principale ( le point d'entrer )...
- ***************************************************************************/
- int main (void)
- {
- int flag_main_exit = EXIT_SUCCESS;
- /**==================[ Si Windows ]================**/
- #if defined (WIN32)
- WSADATA wsa_data;
- /* Si l'initialisation sous windows echoue */
- if ( WSAStartup (MAKEWORD (2, 2), &wsa_data) )
- return EXIT_FAILURE;
- puts ("Windows: winsock2: OK" );
- #endif /**===========[ Fin teste Windows ]==========**/
- /* si app() retourne 1 c'est qu'elle a echoue' */
- if ( App () )
- flag_main_exit = EXIT_FAILURE;
- /**==================[ Si Windows ]================**/
- #if defined (WIN32)
- /* Fermer ce qu'on a initialiser avec WSAStartup */
- WSACleanup ();
- #endif /**===========[ Fin teste Windows ]==========**/
- puts("\nFermeture du serveur ..." );
- getchar();
- return flag_main_exit;
- }
- /**************************************************************************
- * Fonction App():
- ** Le Serveur se connecte avec le client: ConnectToServer()
- ** Si connexion etablie, passer a' la communication CommunicatWithClient()
- ***************************************************************************/
- int App (void)
- {
- SOCKET sock, csock;
- int sock_err;
- if( ConnectWithClient (&csock, &sock) )
- return 1; /* retourne 1 s'il y eu probleme */
- if ( CommunicatWithClient(csock) )
- return 1; /* retourne 1 s'il y eu probleme */
- /* Fin de communication, fermer socket proprement */
- shutdown (sock, 2); shutdown (csock, 2);
- sock_err = closesocket (sock), sock = INVALID_SOCKET;
- if (sock_err == SOCKET_ERROR)
- {
- perror("Error: sock.closesocket()" );
- return 1;
- }
- return 0;
- }
- /******************************************************************************
- * Fonction: ConnectWithClient()
- ** Connexion avec le client (avec sock), et recuperation d'infos
- ** sur le client, sur csock ...
- ******************************************************************************/
- int ConnectWithClient ( SOCKET *csock, SOCKET *sock )
- {
- /* Declaration de 2 structures de type SOCKADDR_IN */
- SOCKADDR_IN sin; /* pour le serveur */
- SOCKADDR_IN csin; /* pour le client */
- int sock_err, recsize;
- FILE* fichier = fopen("log.txt", "a" );
- /* ouverture du socket */
- if ( (*sock = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
- {
- perror("socket.open" );
- return 1; /* Creation du socket a echouer */
- }
- printf ("socket %d est maintenant ouvert en mode TCP/IP\n", *sock);
- sin.sin_addr.s_addr = htonl (INADDR_ANY); /* Pas besoin d'IP */
- sin.sin_port = htons (SERVER_PORT_LISTENING); /* port d'ecoute */
- sin.sin_family = AF_INET; /* famille du protocol (IP) */
- /* bind du socket serveur (sock) avec la structure sin du serveur */
- sock_err = bind (*sock, (SOCKADDR *) &sin, sizeof sin);
- if (sock_err == SOCKET_ERROR)
- {
- perror("Error: bind" );
- return 1;
- }
- /* ecoute sur le port */
- if ( (sock_err = listen (*sock, 5)) == SOCKET_ERROR)
- {
- perror("Error: listen" );
- return 1;
- }
- printf ("ecoute sur le port %d...\n", SERVER_PORT_LISTENING);
- /* attendre et accepter la connection du client en recuperant les infos
- sur le client dans csin, et en créant le socket du client csock */
- recsize = (int) sizeof csin;
- if( (*csock = accept(*sock, (SOCKADDR*) &csin, &recsize)) == INVALID_SOCKET)
- {
- perror("Error: accept" );
- return 1;
- }
- printf ("transmetteur connecte avec socket: %d de: %s port: %d\n",
- *csock, inet_ntoa (csin.sin_addr) ,htons (csin.sin_port));
- if(fichier != NULL)
- {
- fputs("-----------------------------------\n", fichier);
- fprintf(fichier, "transmetteur connecte avec socket: %d de: %s port: %d\n",
- *csock, inet_ntoa (csin.sin_addr) ,htons (csin.sin_port));
- fputs("-----------------------------------\n", fichier);
- fclose(fichier);
- }
- return 0;
- }
- /******************************************************************************
- * Fonction: CommunicatWithClient()
- ** Permet d'echanger des donnees avec le Client. Recevoir ou Envoyer
- ******************************************************************************/
- int CommunicatWithClient ( SOCKET csock )
- {
- char data[1024 + 1];
- int sock_err, err_close;
- FILE* fichier = fopen("log.txt", "a" );
- do
- {
- /* Attendre et recevoir des données envoyé par le client */
- if ( (sock_err = RecvData (csock, data)) == SOCKET_ERROR )
- break;
- else
- {
- data[sock_err] = '\0';
- printf("> %s\n", data);
- if(fichier != NULL)
- fprintf(fichier, "> %s\n", data);
- }
- }
- while (1);
- if(fichier != NULL)
- fclose(fichier);
- /* fermeture du socket client (csock), fin de la communication */
- shutdown (csock, 2);
- err_close = closesocket (csock), csock = INVALID_SOCKET;
- if (err_close == SOCKET_ERROR)
- {
- perror("Error: csock.closesocket()" );
- return 1;
- }
- return 0;
- }
- /******************************************************************************
- * Fonction: RecvData()
- ** Permet de recevoir proprement un Bloc de données
- ** Retourne la taille de data reçu
- ******************************************************************************/
- int RecvData ( SOCKET sock, char *data )
- {
- size_t len_data;
- size_t data_receved = 0;
- char textmode_lendata[255], *pend;
- int n;
- /* Recevoir la taille de data */
- n = recv(sock, textmode_lendata, sizeof textmode_lendata - 1, 0);
- if (n <= 0)
- {
- if( n == 0 )
- printf("Le transmetteur 'a Quitter...\n" );
- return SOCKET_ERROR;
- }
- else
- {
- textmode_lendata[n] = '\0';
- len_data = strtol (textmode_lendata, &pend, 10);
- if (*pend != '\n')
- {
- printf("Pas de donnees recues !\n" );
- return -1;
- }
- }
- /* TantQu'on as pas recu tout, on continue ... */
- while (data_receved < len_data)
- {
- n = recv (sock, data + data_receved, sizeof data - 1, 0);
- if (n > 0)
- data_receved += n;
- else
- return SOCKET_ERROR;
- }
- return ((int)data_receved);
- }
|
quelqu'un peut il m'aider.
cordialement Message édité par dadex85 le 29-11-2012 à 14:10:09 ---------------
david
|