electron測試TCP通信


這幾天學習了一下Elctron,對於這個應用有了一點簡單的認識,將這個過程記錄一下。

 

首先,electron會加載main.js,在這里將整個程序啟動,相當於其他程序的main函數了。

我是基於electron-api-demos來簡單改寫的,所以將服務器端放到了main-process文件夾,在這個文件夾中的js文件,會在啟動的時候被require進來,駐在后台,可以通過設置斷點調試了。PS:使用的是VS Code

 

然后就是使用IPC通信來完成這個服務器端的工作,ipcMain在服務器端的接收通信。先創建一個server

 1 function createServer(port) {
 2   const HOST = '127.0.0.1';
 3 
 4   if (server) {
 5       server.close();
 6   }
 7 
 8   server = net.createServer();
 9   
10   server.listen(port, HOST, function() {
11     console.log('Server listen on port:' + server.address().address);
12     
13     sendServerData('start-server', 'server is listening...');
14   });
15 
16 
17   server.on('connection', socket => {
18     sendServerData('connect-server', 'Get conneciton from:' + socket.remoteAddress);
19     
20     socket.on('data', data => {
21       sendServerData('data-server', 'Get data from socket:' + socket.remoteAddress + '. The data:' + data);
22       socket.write('you said:' + data);
23     });
24 
25     socket.on('close', () => {
26       sendServerData('close-server', 'Socket:' + socket.remoteAddress + " closed");      
27     })
28   });
29   
30 }
create server

通過這個方法就可以建立一個TCP服務器,當收到前端發送的event,就可以創建了,這里前端發送的消息是 start-server

 1 const net = require('net');
 2 const {ipcMain} = require('electron')
 3 
 4 let server;
 5 let client;
 6 let serverEvent, clientEvent;
 7 
 8 ipcMain.on('start-server', (event, arg) => {
 9     serverEvent = event;
10     // event.sender.send()
11     createServer(arg);
12 })
start server

 

補一個函數,就將消息返回給前端

 1 function sendServerData(channel, msg) {
 2   try {
 3     console.log(`server send event ${channel}, ${msg}`);
 4     
 5     if (serverEvent) {
 6       serverEvent.sender.send(channel, msg);
 7     }
 8   } catch (error) {
 9     console.error('gt error:' + error);
10     
11   }
12 }
13   
View Code

 

這樣一個簡單的TCP服務器端就搞定了

接下來就是在前端創建一個html,加一個按鈕(tcp-server)、一個文本框(port-input)用於輸入端口和文本框(log-text)用於顯示接受的消息,當點擊按鈕就發送event到后端

 1 const ipc = require('electron').ipcRenderer
 2 
 3 var severBtn = document.getElementById('tcp-server');
 4 var port = document.getElementById('port-input');
 5 var logoutput = document.getElementById('log-text');
 6 
 7 severBtn.addEventListener("click", () => {
 8 
 9     ipc.send('start-server', port.value);
10 })
11 
12 ipc.on('start-server', (evnet, args) => {
13     addText(args);
14 })
15 
16 ipc.on('connect-server', (evnet, args) => {
17     addText(args);
18 })
19 
20 ipc.on('data-server', (evnet, args) => {
21     addText(args);
22 })
23 
24 ipc.on('close-server', (evnet, args) => {
25     addText(args);
26 })
27 
28 function addText(msg) {
29     logoutput.textContent += msg + '\n';
30 }
Server Front

 

 

 

 

tcp-server


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM