私は、私のRaspberry pi 3で動作しているNode.jsを使ってTCPサーバーをセットアップしました。私はアンドロイドクライアント([this] [1]チュートリアルのコード) 。初めてクライアントに接続して接続するときだけ、サーバーからの応答が得られます。Node.js - 終了エラーの後に書き込み
私は別のリクエストをしようとすると、リクエストが受信されて処理されますが、レスポンスを送信しているときにエラーが発生します。
コード(編集後):
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);
EDIT: アンドロイドコード:事前に
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());
}
ありがとう! 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();
}
あなたがやっているwrite()
た後、あなたが行うことは許されない:
そこに行くのがたくさんあります。あなたのコードを破壊している部分にまで減らすことができますか?しばしば、これは直接問題を指摘するでしょう。また、読みやすいようにコードを書式化してください。あなたのコードエディタはあなたのためにこれを行う必要があります。そうでなければ、[オンライン美容師](http://jsbeautifier.org/)を使うことができます。 –
ソケットで何らかの条件が満たされていなかった場合、3秒でソケットを閉じる 'setTimeout()'があることは分かりますか? – jfriend00
@ jfriend00 setTimeout()を使わずに試しましたが、まだエラーが表示されます – WhiplashOne