这几天学习了一下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. Python自学第一天

    Python #-*- coding:utf8 -*-(Python文件开头添加)用来解决中文编码问题 注:Python3以上文件不用加 一.变量:变量有数字.字母和下划线组成 1.不能以数字开头 2 ...

  2. ajax_封装函数_步骤1

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  3. 关于Jenkins的网站及其他学习的网站

    配置efk https://www.cnblogs.com/fzxiaomange/p/efk-getstart.html https://blog.csdn.net/wangmuming/artic ...

  4. rabbitmq AmqpClient 使用Direct 交换机投递与接收消息,C++代码示例

    // 以DIRECT 交换机和ROUTING_KEY的方式进行消息的发布与订阅 // send // strUri = "amqp://guest:guest@192.168.30.11:8 ...

  5. 公私钥,数字证书,https

    1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私 ...

  6. Redis GeoHash

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632810.html 背景 微信找附近的人,滴滴找附近的单车,饿了么找附近的餐馆 GeoHash算法 ...

  7. UML-六大关系

    六大关系 依赖关系:(只要是在类中使用到了对方就存在依赖关系) 泛化关系:就是继承关系,即依赖关系的特例 实现关系:依赖关系的特例 关联关系:类于类之间的关系,即依赖关系的特例(具有导航性:双向关系或 ...

  8. Java反射学习-4 - 反射调用方法

    反射调用方法: package cn.tx.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Method ...

  9. 直击KubeCon 2018 |云原生正在改变你的衣食住行

    云计算从不被看好到成长为势不可挡的技术潮流,仅仅用了十年的时间.如今“云原生”又被企业以及开发者奉为圭臬,并被认为是云计算的未来. 阿里云容器技术负责人易立认为云计算有三个阶段:云搬迁.云就绪和云原生 ...

  10. kNN#约会网站预测数据

    #约会网站预测数据 def classifyPersion(): resultList = ['not at all','in small doses','in large doses'] #inpu ...