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:
inicie o servidor:
./busybox-armv7l nc -klv -p 55764
listening on [::]:55764 ...
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
Por quê?
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?
Tags javascript http tcp nc