我已经使用在Raspberry pi 3上运行的Node.js设置了TCP服务器。我使用Android客户端与服务器通信(来自[this] [1]教程的代码) 。只有当客户端连接到第一次连接时,我才会收到来自服务器的响应。Node.js - 写完后错误
当我尝试向它发出另一个请求时,请求被接收并处理,但在发送响应时,出现错误提示:write after end。
码(编辑):
var net = require('net');
var devList = [];
var dev_msg;
function serverCallback(socket){
console.log("-----------------------------------------------------");
socket.setNoDelay(true);
socket.on('data', function(data){
var req = data.toString();
console.log(req);
InitSystems(socket);
});
socket.on('error', function(err){
console.log(""+err);
});
socket.on('end', function(){
console.log("Write end");
});
}
function InitSystems(socket){
socket.write("Message 1: Hi!");
socket.end();
//After 2nd request from client
socket.write("Message 2: Event has successfully taken place!"); //<-- Error here
socket.end();
}
console.log("Server now running!");
var netServer = net.createServer(serverCallback);
netServer.listen(6969);
编辑: 的Android代码:
try{
socket = new Socket("192.168.1.13", 6969);
socket.setSoTimeout(24 * 60 * 60 * 1000);
socket.setKeepAlive(true);
dOut = new DataOutputStream(socket.getOutputStream());
dOut.writeUTF("INIT");
dOut.flush();
ba = new ByteArrayOutputStream(1024);
buffer = new byte[1024];
int bytesRead;
is = socket.getInputStream();
while((bytesRead = is.read(buffer)) != -1){
ba.write(buffer, 0, bytesRead);
res += ba.toString("UTF-8");
}
Log.d(TAG, res);
connStat = true;
}catch (UnknownHostException e) {
Log.d(TAG, e.toString());
} catch(SocketException e){
Log.d(TAG, e.toString());
} catch (IOException e){
try{
Thread.sleep(2100);
}catch (Exception e1){
}finally {
connStat = false;
}
} catch (Exception e) {
Log.d(TAG, e.toString());
}
提前感谢!
有很多事情在那里。你能否将你的代码缩减到那个突破的部分?通常这会直接指出问题。另外,请格式化您的代码,使其易于阅读。你的代码编辑器应该为你做这个。如果没有,你可以使用[在线美化](http://jsbeautifier.org/)。 –
你知道你有一个'setTimeout()',如果以前没有在套接字上遇到过一些情况,它会在3秒内关闭套接字? – jfriend00
@ jfriend00我已经尝试过没有setTimeout(),但我仍然得到错误 – WhiplashOne