Сокет TCP Javascript (сервер) и Python (клиент) - PullRequest
0 голосов
/ 08 марта 2020

Я написал пользовательский Python клиент и сервер, который обменивается данными через TCP-сокеты:

  1. Клиент подключается к серверу
  2. Клиент бездействует, пока сервер не отправит пользовательскую команду клиент (например, сервер отправляет количество секунд, в течение которых он хочет, чтобы клиент спал)
  3. Клиент выполняет команду (что-то вроде time.sleep (5))
  4. Клиент отправляет ответ обратно когда сервер завершит выполнение команды
  5. Go до шага 2 и повторите команду

способ отправки и получения данных сокета выглядит следующим образом:

  1. Создание сообщения в виде JSON строки
  2. Чтение / запись длины сообщения в сокет (при чтении клиент / сервер будет зависать до получения сообщения, что нормально для моего варианта использования)
  3. Чтение / запись сообщения в сокет (так как длина известна, мы знаем, сколько байтов нам нужно прочитать из сокета, чтобы получить все сообщение)

Я попытался написать сервер использует Node.JS и kee пинговать клиента в Python (у меня нет JS опыта):

var net = require('net');

var server = net.createServer(function(socket) {
    console.log('Connected:', socket.remoteAddress, ':', socket.remotePort);

    while (true) {
        // Send a custom command to the client
        values = prepareMessage({ 'command' : 'sleep', 'time' : '5' })
        socket.write(values[0]);
        socket.write(values[1]);

        // Wait for client to execute the command and receive response
        res = socket.read(32); // Message length is at most 32 bits
        while(res == null) {
            res = socket.read(32);
            console.log('Wait for message length');
        }
        console.log('Message length received, now read message');
        message = socket.read(res);
    }
});

server.listen(1337, '127.0.0.1');


/*
Converts message from dictionary to a correct format to pass onto the client
*/
function prepareMessage(msg) {
    var message = JSON.stringify(msg);
    var message_length = (message.length).toString(2);

    // Make the message contain 32 bits
    while(message_length.length < 32) {
        message_length = "0" + message_length;
    }

    return [message_length, message];
}

Проблема в том, что мой метод socket.read() постоянно возвращает null, независимо от того, что я ему отправляю. Есть ли способ конвертировать мой python код сервера в этот?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...