2017-09-22 2 views
0

Je souhaite envoyer un message de l'application Meteor à une application Java, l'application Meteor est la socket du serveur et Java le client;Envoi d'un socket de serveur de messages dans Meteor au client Java

Mon but est d'écrire un message dans une zone de texte dans l'application Meteor et de l'envoyer à Java en utilisant des sockets. Est-ce que quelqu'un peut me signaler quelle erreur dans mon code?

Mon code: Meteor

my.html

Template.hello.events({ 
'click #hola'(event, instance) { 
    Meteor.call("method_socket", "say_hello"); // for each click I want to send a message to java 
} 
}); 

myServer.js

import { Meteor } from 'meteor/meteor'; 
var net = require('net'); 

Meteor.startup(() => { 
    // Here is necessary start the server socket 
    var net = require('net'); 
    var server = net.createServer(
    function (connection) { 
     console.log('client connect'); 
     connection.on('end', function() { 
     console.log('client end'); 
     }); 
     connection.on('error', function() { 
     console.log('client error'); 
     }); 
     connection.on('close', function() { 
     console.log('client close'); 
     }); 
     connection.on('data', function (data) { 
     console.log("received :", data.toString()); 
     }); 
     connection.write('Hello World!\r\n'); 
     connection.pipe(connection); 
    } 
); 

    server.listen(666, function() { 
    console.log('server is listening'); 
    }); 

    Meteor.methods({ 
    method_socket: function (message) { 
     // I can´t send this message to Java app I had tried: 
     server.connection.write(message+'\r\n'); 
      //connection.write(message+'\r\n'); 
    } 
    }); 

}); 

Mon code Java:

public static void main(String[] args) { 
    Socket smtpSocket = null; 
    DataOutputStream os = null; 
    DataInputStream is = null; 
    PrintStream output; 
    try { 
     smtpSocket = new Socket("localhost", 666); 
     os = new DataOutputStream(smtpSocket.getOutputStream()); 
     is = new DataInputStream(smtpSocket.getInputStream()); 
     output = new PrintStream(smtpSocket.getOutputStream()); 
     output.print("Rastalovely"); // Send to Meteor this message 
    } catch (UnknownHostException e) { 
     System.err.println("Don't know about host: hostname"); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for the connection to: hostname"); 
    } 
    if (smtpSocket != null && os != null && is != null) { 
     try { 
      String responseLine; 
      while ((responseLine = is.readLine()) != null) { 
       // wait the response from Meteor 
       System.out.println("Server: " + responseLine); 
       if (responseLine.indexOf("Ok") != -1) { 
        break; 
       } 
      } 
      os.close(); 
      is.close(); 
      smtpSocket.close(); 
     } catch (UnknownHostException e) { 
      System.err.println("Trying to connect to unknown host: " + e); 
     } catch (IOException e) { 
      System.err.println("IOException: " + e); 
     } 
    } 
} 

Merci

+0

Existe-t-il une sortie/une erreur de la console? – Jankapunkt

+0

juste "ne peut pas lire la propriété écrire de indéfini", lors de l'utilisation: server.connection.write (message + '\ r \ n'); – Rastalovely

+0

Je vois, parce que la connexion n'est pas dans un contexte partagé, votre méthode ne connaît pas la connexion car le serveur est une variable créée au démarrage. Faites-en une variable en dehors de Meteor.startup. – Jankapunkt

Répondre

1

Pour utiliser la connexion dans la méthode, vous devez le rendre disponible, soit en le déclarant en dehors Meteor.startup je préfère aussi déclarer des méthodes Meteor sur le code de haut niveau afin d'initialiser avant le démarrage:

var net = require('net'); 
var server; 

Meteor.startup(() => { 
    // Here is necessary start the server socket 

    server = net.createServer(
    function (connection) { 
     //... 
    } 
); 

    server.listen(666, function() { 
    console.log('server is listening'); 
    }); 

}); 

Meteor.methods({ 
    method_socket: function (message) { 
     // I can´t send this message to Java app I had tried: 
     server.connection.write(message+'\r\n'); 
     //connection.write(message+'\r\n'); 
    } 
}); 
+0

Votre idée est d'écrire ceci: server = net.createServer ( function (connection) {...} ); dans method_socket? – Rastalovely

+0

Vous pouvez également appeler net.createServer dans la méthode, mais cela créerait le serveur et la connexion à chaque fois que la méthode est appelée, ce qui explique pourquoi vous mettez le serveur comme variable disponible pour la méthode mais que vous l'initialisez au démarrage. – Jankapunkt