var net= require('net');
var HOST = '192.168.10.209';
var WEBPORT= 9001;
var APPPORT= 9002;
var ServerSocket;
var clientSockets= new Array();
net.createServer(function(sock) {
console.log('CONNECTION: ' + sock.remoteAddress+ ':' + sock.remotePort);
clientSockets.push({data:sock});
// 为这个socket实例添加一个"data"事件处理函数
sock.on('data',function(data) {
//console.log('DATA' + sock.remoteAddress + ': ' + data);
if(ServerSocket==null){// APP服务器不在线
var jsonString = '{"meta":{"code":0,"message":"解码服务器不在线"},"data":""}';
var httpContent = 'HTTP\/1.1 200\nContent-Type:application\/json\n\n'+jsonString;
sock.write(Buffer.from(httpContent));
sock.end();
}else{
ServerSocket.write(sock.remoteAddress+'\n'+sock.remotePort+'\n'+data);
// 超时结束
setTimeout(function() {
// 如果还没有响应则超时处理
for (var i= 0; i< clientSockets.length; i++) {
var socket= clientSockets[i]['data'];
if(socket.remoteAddress==sock.remoteAddress&&socket.remotePort==sock.remotePort){
var jsonString = '{"meta":{"code":0,"message":"请求超时"},"data":""}';
var httpContent = 'HTTP\/1.1 200\nContent-Type:application\/json\n\n'+jsonString;
sock.write(Buffer.from(httpContent));
sock.end();
}
}
},15000);
}
});
// 为这个socket实例添加一个"close"事件处理函数
sock.on('close',function(data) {
removeSocket(sock);
console.log('CLOSED: ' +
sock.remoteAddress+ ' ' + sock.remotePort);
});
}).listen(WEBPORT,HOST);
// 与APP建立连接
net.createServer(function(sock) {
ServerSocket= sock;
console.log('iPhone is Online!');
sock.on('data',function(data) {// APP向服务器回传数据
var dataString= data+'';
var arr= dataString.split('\n');
var host= arr[0];
var port= arr[1];
var content= arr[2];
for (var i= 0; i< clientSockets.length; i++) {
var socket= clientSockets[i]['data'];
if(socket.remoteAddress==host&&socket.remotePort==port){
if(content=='close'){
var jsonString = '{"meta":{"code":0,"message":"非法请求"},"data":""}';
var httpContent = 'HTTP\/1.1 200\nContent-Type:application\/json\n\n'+jsonString;
socket.write(Buffer.from(httpContent));
socket.end();
break;
}
var jsonString = '{"meta":{"code":1,"message":"请求成功!"},"data":"'+content+'"}';
var httpContent = 'HTTP\/1.1 200\nContent-Type:application\/json\n\n'+jsonString;
socket.write(Buffer.from(httpContent));
socket.end();
break;
}
}
});
sock.on('close',function(data) {
console.log('iPhone is OffLine!');
ServerSocket= null;
});
}).listen(APPPORT,HOST);
// 从连接池删除指定Socket连接
function removeSocket(sock){
for (var i= 0; i< clientSockets.length; i++) {
var socket= clientSockets[i]['data'];
if(socket.remoteAddress==sock.remoteAddress&&socket.remotePort==sock.remotePort){
clientSockets.splice(i,1);
break;
}
}
}
console.log('Server is OPEN');