IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Faire un site internet qui établie une connexion TCP/IP avec un serveur


Sujet :

NodeJS

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut Faire un site internet qui établie une connexion TCP/IP avec un serveur
    Bonjour,

    J'ai acheté un Raspberry PI que j'aimerai piloter grâce à un site internet.
    J'ai déjà réussi a établir une connexion TCP/IP à mon Raspberry PI à l'aide d'un programme cpp.

    J'aimerai faire la même chose dans une page web. NodeJS me semble le meilleur moyen de faire cela mais je n'ai pas réussi à le faire fonctionner jusqu'à présent.

    Je vous donne pour info les programmes cpp qui fonctionnent:
    server
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    // Server side C/C++ program to demonstrate Socket programming
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/socket.h>
    #include <stdlib.h>
    #include <netinet/in.h>
    #include <string.h>
    #define PORT YYYY
    int main(int argc, char const *argv[])
    {
        int server_fd, new_socket, valread;
        struct sockaddr_in address;
        int opt = 1;
        int addrlen = sizeof(address);
        char buffer[1024] = {0};
        char *hello = "Hello from server";
     
        // Creating socket file descriptor
        if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
        {
            perror("socket failed");
            exit(EXIT_FAILURE);
        }
     
        // Forcefully attaching socket to the port 
        if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
                                                      &opt, sizeof(opt)))
        {
            perror("setsockopt");
            exit(EXIT_FAILURE);
        }
        address.sin_family = AF_INET;
        address.sin_addr.s_addr = INADDR_ANY;
        address.sin_port = htons( PORT );
     
       // Forcefully attaching socket to the port 8080
        if (bind(server_fd, (struct sockaddr *)&address, 
                                     sizeof(address))<0)
        {
            perror("bind failed");
            exit(EXIT_FAILURE);
        }
        if (listen(server_fd, 3) < 0)
        {
            perror("listen");
            exit(EXIT_FAILURE);
        }
        if ((new_socket = accept(server_fd, (struct sockaddr *)&address, 
                           (socklen_t*)&addrlen))<0)
        {
            perror("accept");
            exit(EXIT_FAILURE);
        }
        valread = read( new_socket , buffer, 1024);
        printf("%s\n",buffer );
        send(new_socket , hello , strlen(hello) , 0 );
        printf("Hello message sent\n"); 
        return 0;
    }


    client
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    // Client side C/C++ program to demonstrate Socket programming
    #include <stdio.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/types.h>
    #include <netdb.h>
    #define PORT ZZZZ
    #define IP_Public "XXX.XXX.XXX.XXX"   
    int main(int argc, char const *argv[])
    {
        int sock = 0, valread;
        struct sockaddr_in serv_addr;
        char *hello = "Hello from client";
        char buffer[1024] = {0};
        if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
            printf("\n Socket creation error \n");
            return -1;
        }
     
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(PORT);
     
        // Convert IPv4 and IPv6 addresses from text to binary form
        if(inet_pton(AF_INET, IP_Public, &serv_addr.sin_addr)<=0) 
        {
            printf("\nInvalid address/ Address not supported \n");
            return -1;
        }
     
        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
        {
            printf("\nConnection Failed \n");
            return -1;
        }
        send(sock , hello , strlen(hello) , 0 );
        printf("Hello message sent\n");
        valread = read( sock , buffer, 1024);
        printf("%s\n",buffer );
        return 0;
    }

    Note, pour des raisons de sécurité j'ai remplacé l'IP adresse et les ports.
    Ceci fonctionne très bien et j'obtiens:

    Serveur:
    me@rem:~/tcp $ ./server
    Hello from client
    Hello message sent
    me@rem:~/tcp $
    Client:
    moi@Client:~/tcp $ ./clientx
    Hello message sent
    Hello from server
    moi@Client:~/tcp $
    Ce que j'aimerait faire c'est exactement la même chose que la partie client en cpp mais en JS dans une page web.
    Voici mon code:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <div ID="tab_bt" class="table_bt" onclick="TCP_Connect();"><p>Connect</p></div>

    javascript:
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Include Nodejs' net module.
    Send_new_messsage('Include Nodejs net module');
    const Net = require('net');
    Send_new_messsage('done');
     
    function getConn2(CommName){
    Send_new_messsage('getConn2()');	
    getConn(CommName);
    }
     
     
    // This function create and return a net.Socket object to represent TCP client.
    function getConn(CommName){
    Send_new_messsage('function getConn(CommName)');
    // The port number and hostname of the server.
    // Create a new TCP client.
    const client = new Net.Socket();
    // Send a connection request to the server.
    client.connect( { port: ZZZZ, host: 'XXX.XXX.XXX.XXX'}, function() {
    // If there is no error, the server has accepted the request and created a new
    // socket dedicated to us.
    ////console.log('TCP connection established with the server.');
     
    // The client can now send data to the server by writing to its socket.
    client.write('Start_Connection');
    });
     
    Send_new_messsage('function end');
    }

    Les log du javascript montre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    18:12:42: Include Nodejs net module
    18:13:19: Connect2: 
    18:13:19: getConn2()
    18:13:19: function getConn(CommName)
    Mais coté serveur le programme en cpp ne reçoit rien.
    Quelqu'un serait t'il ce qui cloche ?

    En gros j'essaie d'utiliser JsNode coté client avec un programme c++ coté serveur. Pouvez-confirmer que c'est possible ?
    Peut être que JsNode n'est pas la bonne techno a utiliser pour faire ce que je veux faire. Y a t il quelque chose de mieux à utiliser coté client pour avoir une page web qui communique en TCP/IP directement avec un programme c++ coté serveur ?

    ++
    Dereck

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 119
    Points : 168
    Points
    168
    Par défaut
    Bonjour, non tu ne peux pas faire tourner un server dans le browser, les modules (tel que 'net' par example) de Nodejs ne sont pas disponible dans les navigateurs, ils le sont uniquement la ou le Runtime Environment de Nodejs tourne(c'est a dire sur un systhem d'exploitation). Certain disent qu'il est possible d'exporter certains Node Core Module via le module 'Browserify', mais cela ne fonctionne pas pour tous les module (et il ne me semble pas que net ni http le soit).

    A premiere vue, pour connecter un browser avec un server, le plus simple ne serait pas d'utiliser TCP ni HTTP mais une WebSocket, tu peux voir du cote du framework Socket.io. Ensuite coter server si vraiment tu a besoins de passer par CPP, tu peux etablir une seconde socket/duplex-stream entre le server Nodejs(connecte au navigateur gace a Socket.io) et le server CPP (piper les deux socket je veux dire).

    Une second solution serait d'utiliser le framework Nextjs(qui apparemment permettrait de faire directement tourner Nodejs sur le navigateur), c est tout nouveau et ils disent que ca marche https://blog.stackblitz.com/posts/in...webcontainers/

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Merci Djedjethai, tu as raison je vais me diriger vers les WebSocket et essayer de coder le serveur WebSocket en cpp.
    J'ai vu qu'il y avait deja des personnes qui ont fait des projet comme cela en open source.
    Encore merci !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilitaire graphique qui supporte une connexion SSH
    Par sofiane1111 dans le forum Oracle
    Réponses: 7
    Dernier message: 16/01/2008, 22h22
  2. Réponses: 4
    Dernier message: 28/02/2007, 09h31
  3. comment faire un site internet entierement en flash
    Par vantoff dans le forum Flash
    Réponses: 4
    Dernier message: 27/07/2006, 07h28
  4. Site internet qui met en cache les pages web
    Par LFC dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 07/06/2006, 10h10
  5. configuration serveur apache -> faire 1 site Internet
    Par jejerome dans le forum Apache
    Réponses: 4
    Dernier message: 19/04/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo