这几天学习了一下Elctron,对于这个应用有了一点简单的认识,将这个过程记录一下。

首先,electron会加载main.js,在这里将整个程序启动,相当于其他程序的main函数了。

我是基于electron-api-demos来简单改写的,所以将服务器端放到了main-process文件夹,在这个文件夹中的js文件,会在启动的时候被require进来,驻在后台,可以通过设置断点调试了。PS:使用的是VS Code

然后就是使用IPC通信来完成这个服务器端的工作,ipcMain在服务器端的接收通信。先创建一个server

 function createServer(port) {
const HOST = '127.0.0.1'; if (server) {
server.close();
} server = net.createServer(); server.listen(port, HOST, function() {
console.log('Server listen on port:' + server.address().address); sendServerData('start-server', 'server is listening...');
}); server.on('connection', socket => {
sendServerData('connect-server', 'Get conneciton from:' + socket.remoteAddress); socket.on('data', data => {
sendServerData('data-server', 'Get data from socket:' + socket.remoteAddress + '. The data:' + data);
socket.write('you said:' + data);
}); socket.on('close', () => {
sendServerData('close-server', 'Socket:' + socket.remoteAddress + " closed");
})
}); }

create server

通过这个方法就可以建立一个TCP服务器,当收到前端发送的event,就可以创建了,这里前端发送的消息是 start-server

 const net = require('net');
const {ipcMain} = require('electron') let server;
let client;
let serverEvent, clientEvent; ipcMain.on('start-server', (event, arg) => {
serverEvent = event;
// event.sender.send()
createServer(arg);
})

start server

补一个函数,就将消息返回给前端

 function sendServerData(channel, msg) {
try {
console.log(`server send event ${channel}, ${msg}`); if (serverEvent) {
serverEvent.sender.send(channel, msg);
}
} catch (error) {
console.error('gt error:' + error); }
}

这样一个简单的TCP服务器端就搞定了

接下来就是在前端创建一个html,加一个按钮(tcp-server)、一个文本框(port-input)用于输入端口和文本框(log-text)用于显示接受的消息,当点击按钮就发送event到后端

 const ipc = require('electron').ipcRenderer

 var severBtn = document.getElementById('tcp-server');
var port = document.getElementById('port-input');
var logoutput = document.getElementById('log-text'); severBtn.addEventListener("click", () => { ipc.send('start-server', port.value);
}) ipc.on('start-server', (evnet, args) => {
addText(args);
}) ipc.on('connect-server', (evnet, args) => {
addText(args);
}) ipc.on('data-server', (evnet, args) => {
addText(args);
}) ipc.on('close-server', (evnet, args) => {
addText(args);
}) function addText(msg) {
logoutput.textContent += msg + '\n';
}

Server Front

tcp-server

electron测试TCP通信的更多相关文章

  1. 异步tcp通信——APM.ConsoleDemo

    APM测试 俗话说麻雀虽小,五脏俱全.apm虽然简单,但是可以实现单机高性能消息推送(可以采用redis.kafka等改造成大型分布式消息推送服务器). 测试demo: using System; u ...

  2. TCP通信中的大文件传送

    TCP通信中的大文件传送 源码   (为节省空间,不包含通信框架源码,通信框架源码请另行下载) 文件传送在TCP通信中是经常用到的,本文针对文件传送进行探讨 经过测试,可以发送比较大的文件,比如1个G ...

  3. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  4. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  5. TCP通信服务端及客户端代码

    Java TCP通信使用的是Socket(客服端)和ServerSocket(服务端),具体代码如下. server端代码: import java.io.BufferedReader; import ...

  6. 等待唤醒机制,UDP通信和TCP通信

    等待唤醒机制 通过等待唤醒机制使各个线程能有效的利用资源. 等待唤醒机制所涉及到的方法: wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中. notify():唤醒, ...

  7. 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)

    基础准备 首先需要明白数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提 ...

  8. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  9. 基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 实验目的 - 学习ESP8266模块(ESP-01) ...

随机推荐

  1. android 学习路线

    转载来源:https://blog.csdn.net/lixuce1234/article/details/77947405 jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图 ...

  2. mysql 5.7 事务隔离级别

    事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repeatable read).串行化(serializable). 未提交读: ...

  3. JVM(3) 之 内存分配与回收策略

    开发十年,就只剩下这套架构体系了! >>>   之前讲过虚拟机中的堆,他是整个内存模型中占用最大的一部分,而且不是连续的.当有需要分配内存的时候,一般有两个方法分配,指针碰撞和空闲列 ...

  4. shell 脚本规范

    shell 脚本规范 一.背景 1.使用哪一种shell? 必须使用bash shell 2.什么时候使用shell? 数量相对较少的操作 脚本文件少于100行 3.脚本文件扩展名是什么? shell ...

  5. JS面向对象——组合使用构造函数模型与原型模型

    该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</ ...

  6. html中内联元素和块级元素的区别

    1.下表列出了内联元素和块级元素的主要区别 html中内联元素和块级元素的区别 块级元素 行内元素 独占一行,默认情况下,其宽度自动填满其父元素宽度 相邻的行内元素会排列在同一行里,直到一行排不下,才 ...

  7. vue之templete模板

    1.templete里要用data里的数据的话,不要加this. 2.按理说Js是写在<script></script>标签体内的.但是Vue的templete模板中对所有的数 ...

  8. C++ 从txt文本中读取map

    由于存入文本文件的内容都为文本格式,所以在读取内容时需要将文本格式的内容遍历到map内存中,因此在读取时需要将文本进行切分(切分成key和value) 环境gcc #include<iostre ...

  9. JS基础入门篇(三十四)— 面向对象(一)

    1.对象 对象的定义 : 对象 是 由 键值对 组成的无序集合. 创建对象两种方法 : 方法一 : 字面量方法 var obj = {name: "k"}; 方法二 : new O ...

  10. 前端每日实战:76# 视频演示如何用纯 CSS 创作一组单元素办公用品(内含2个视频)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMgmwB 可交互视频 此视频是可 ...