web-dev-qa-db-fra.com

Comment créer un simple socket dans node.js?

J'essaie de créer un socket factice à utiliser dans certains de mes tests

var net = require("net");

var s = new net.Socket();

s.on("data", function(data) {
  console.log("data received:", data);
});

s.write("hello!");

Obtenir cette erreur

Erreur: cette socket est fermée.

J'ai aussi essayé de créer le socket avec

var s = new net.Socket({allowHalfOpen: true});

Qu'est-ce que je fais mal?


Pour référence, le test complet ressemble à ceci

it("should say hello on connect", function(done) {

  var socket = new net.Socket();

  var client = Client.createClient({socket: socket});

  socket.on("data", function(data){
    assert.equal("hello", data);
    done();
  });

  client.connect();
  // writes "hello" to the socket
});
16
user633183

Je ne pense pas que le serveur est mis en état d'écoute. C'est ce que j'utilise ..

// server
require('net').createServer(function (socket) {
    console.log("connected");

    socket.on('data', function (data) {
        console.log(data.toString());
    });
})

.listen(8080);

// client
var s = require('net').Socket();
s.connect(8080);
s.write('Hello');
s.end();

Client seulement ..

var s = require('net').Socket();
s.connect(80, 'google.com');
s.write('GET http://www.google.com/ HTTP/1.1\n\n');

s.on('data', function(d){
    console.log(d.toString());
});

s.end();
30
John Williams

Essaye ça.

Le code de production app.js:

var net = require("net");

function createSocket(socket){
    var s = socket || new net.Socket();
    s.write("hello!");
}

exports.createSocket = createSocket;

Le code de test: test.js: (Mocha)

var sinon = require('sinon'),
    assert = require('assert'),
    net = require('net'),
    prod_code=require('./app.js')

describe('Example Stubbing net.Socket', function () {
    it("should say hello on connect", function (done) {
        var socket = new net.Socket();
        var stub = sinon.stub(socket, 'write', function (data, encoding, cb) {
            console.log(data);
            assert.equal("hello!", data);
            done();
        });
        stub.on = socket.on;
        prod_code.createSocket(socket);
    });
});
5
zsong

vous devez connecter votre socket avant de pouvoir y écrire:

var PORT = 41443;

var net = require("net");

var s = new net.Socket();

s.on("data", function(data) {
  console.log("data received:", data);
});
s.connect(PORT, function(){
    s.write("hello!");
});
0
Ido Ofir

Nous pouvons créer un serveur de socket en utilisant le module net npm et écouter de n'importe où. Après avoir créé un serveur de socket, nous pouvons vérifier à l'aide de telnet (socket client) d'interagir avec le serveur.

server.js

'use strict';

const net = require('net');
const MongoClient= require('mongodb').MongoClient;
const PORT = 5000;
const ADDRESS = '127.0.0.1';
const url = 'mongodb://localhost:27017/gprs';

let server = net.createServer(onClientConnected);
server.listen(PORT, ADDRESS);

function onClientConnected(socket) {
  console.log(`New client: ${socket.remoteAddress}:${socket.remotePort}`);
  socket.destroy();
}

console.log(`Server started at: ${ADDRESS}:${PORT}`);

function onClientConnected(socket) {

  let clientName = `${socket.remoteAddress}:${socket.remotePort}`;
  console.log(`${clientName} connected.`);
  socket.on('data', (data) => {
    let m = data.toString().replace(/[\n\r]*$/, '');
    var d = {msg:{info:m}};
    insertData(d);
    console.log(`${clientName} said: ${m}`);
    socket.write(`We got your message (${m}). Thanks!\n`);
  });

  socket.on('end', () => {
    console.log(`${clientName} disconnected.`);
  });

}

function insertData(data){
  console.log(data,'data');
        MongoClient.connect(url, function(err, db){
        console.log(data);
        db.collection('gprs').save(data.msg , (err,result)=>{
            if(err){
                console.log("not inserted");
            }else {
                console.log("inserted");
            }
        });
    });
}

en utilisant telnet:

$ telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hi
We got your message (hi). Thanks!
0
KARTHIKEYAN.A