Как создать простой сокет в node.js?

Я пытаюсь создать фиктивный сокет для использования в некоторых моих тестах

var net = require("net");

var s = new net.Socket();

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

s.write("hello!");

Получение этой ошибки

Ошибка: этот разъем закрыт.

Я также попытался создать сокет с

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

Что я делаю неправильно?


Для справки, полный тест выглядит следующим образом

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
});

Ответ 1

Я не думаю, что сервер включен в состояние прослушивания. Это то, что я использую.

// 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();

Только клиент.

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();

Ответ 2

Попробуйте это.

Производственный код app.js:

var net = require("net");

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

exports.createSocket = createSocket;

Код проверки: 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);
    });
});

Ответ 3

вам необходимо подключить ваш сокет, прежде чем вы сможете его написать:

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!");
});

Ответ 4

Мы можем создать сервер сокетов с помощью модуля net npm и прослушивать из любого места. после создания сервера сокетов мы можем проверить использование telnet (клиентского сокета) для взаимодействия с сервером.

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");
            }
        });
    });
}

с помощью telnet:

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