nc mostra saída parcial

0

Estou usando o busybox v1.28.1 em um dispositivo incorporado (armv7l). Eu quero usar nc para ouvir conexões TCP feitas por um aplicativo de JavaScript (QML) na mesma máquina.

Aqui um exemplo da solicitação:

function post(url, data) {
    var xhr = new XMLHttpRequest();
    var params = data;

    var timer = Qt.createQmlObject("import QtQuick 1.1; Timer {interval: 50; repeat: false; running: true;}", root, "TimerTimeout");

    timer.triggered.connect(function(){
        xhr.abort();
    });

    xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            timer.running = false;
            timer.destroy();
        }
    };

    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.setRequestHeader("Content-length", params.length);
    xhr.setRequestHeader("Connection", "close");
    xhr.send(params);
}

// ...

post("http://127.0.0.1:55764", "Hello world");

No console, eu corro este comando:

./busybox-armv7l nc -klv -p 55764

ele deve escutar a conexão de entrada na porta 55764 e deve ficar atento a outra conexão após a conclusão da conexão atual.

Mas esse é o comportamento que eu notei:

  1. inicie o servidor:

    ./busybox-armv7l nc -klv -p 55764 listening on [::]:55764 ...

  2. envie o primeiro pacote:

    connect to [::ffff:127.0.0.1]:55764 from localhost.localdomain:34325 ([::ffff:127.0.0.1]:34325)

3.Envie outro pacote:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 5
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: en,*
User-Agent: Mozilla/5.0
Host: 127.0.0.1:55764

Hello world
  1. agora, se eu enviar outros pacotes, nenhuma outra saída será mostrada

Por quê?

EDITAR

Eu mudei o código assim:

function post(url, data) {
    var xhr = new XMLHttpRequest();
    var params = data;

    var timer = Qt.createQmlObject("import QtQuick 1.1; Timer {interval: 50; repeat: false; running: true;}", root, "TimerTimeout");

    timer.triggered.connect(function(){
        xhr.abort();
    });

    xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
            timer.running = false;
            timer.destroy();
            //console.log(xhr.responseText);
        }
    };

    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-length", params.length);
    xhr.send(params);
}

e o script:

#!/bin/bash
while true; do
  echo -e "HTTP/1.1 200 OK\n\n" | ./busybox-armv7l nc -lv -p 55764 -w 1
done

e parece que funciona. Você vê outra evidência de erros?

    
por Mark 17.11.2018 / 22:29

0 respostas