偶然的機遇,今天接觸了服務器。剛開始不知道服務器爲何物,今天算是瞭解了個大概。
搭建的TCP服務器算一個載體,可以把一些硬件獲取到的數據全部接入網絡,然後通過一個接口發給手機或者上位機。通過特定的IP地址。
我的手機想要操控一盞燈。可以通過服務器。將硬件端連入搭建好的服務器,然後軟件端也連入對應的服務器。當服務器接收到手機發過去的指令後,處理一下再把數據發送給硬件端,硬件段接收到指令 ,實現開關燈。
IP地址:就是給互聯網上每一臺主機(或路由器)的每一個接口分配一個在全世界範圍內是唯一的32位的標識符/
http://nodejs.cn/api/net.html#net_server_listening nodejs API文檔
const net = require('net'); //作用類似頭文件
var number;
const server = net.createServer((c) => {
// 'connection' listener
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('data',function (data){
// console.log(data);
number = parseInt(data);
number+=1;
console.log(number);
})
client.push(c);
c.write('hello\r\n');
});
server.on('error', (err) => {
console.log('監聽出錯');
});
server.listen(8124, () => {
console.log('server bound');
});
console.log('server bound123');
第一句話類似於C語言的頭文件。分析一下,代碼執行的時候會最先輸出 server bound123。可能存在延遲還沒有完全成功建立好服務器。然後纔會輸出 sever bound 代表完成 正在監聽端口號的數據。 此時就算代碼執行完成 。 然後一旦有用戶連接,就會分配一個c給用戶。去執行createServer C中的程序。這就有點類似於EDA的always語句。每當有東西改變的時候進入一下。 如果有用戶連接,就會顯示一個 client connected ,然後 發送給用戶hello 。。 一旦用戶發送數據給我 收到的數據是字符型的 利用parseint轉化爲數字型 將這個變量+1 打印在我的窗口上。 ======
最基本的用戶連接弄好了 打算稍微升級一下,因爲最後要做的項目是硬件和手機同時相連接,然後將硬件發給我的數據進行處理之後發送給手機。
const net = require('net');
var number;
var client=new Array([2]);
const server = net.createServer((c) => {
// 'connection' listener
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('data',function (data){
// console.log(data);
number = parseInt(data);
number+=1;
console.log(number);
for(var i=0;i<2;i++){
try{
client[i].write(number.toString());
}catch(e){c.write('對方暫時無法應答'); }
}
})
client.push(c);
c.write('hello\r\n');
});
server.on('error', (err) => {
console.log('監聽出錯');
});
server.listen(8124, () => {
console.log('server bound');
});
console.log('server bound123');
創建了一個數組 存放了2個用戶。一個手機端一個硬件端。 如果只有一個用戶連接的時候 ,可能會出現數組越界情況,因爲有一個是空的找不到。 所以採用了獨特的try函數。 試着去給兩個用戶端發送相同的信息,如果用戶不存在,就轉而發送給存在的用戶 用戶不存在。 這樣便簡單的實現了 2個用戶的交互。 因爲number是數字形式, 發送的都是字符,所以在try發送後面 增加了 number.toString();將數字轉化爲字符。