找回密码
 立即注册

QQ登录

只需一步,快速开始

孙杰

注册会员

5

主题

10

帖子

131

积分

注册会员

积分
131
孙杰
注册会员   /  发表于:2021-9-4 16:07  /   查看:2585  /  回复:1
一、 有部分场景浏览器是无法调用本地DLL,然而DLL还不能在服务端进行加载调用,只能到客户端下执行。
二、 解决思路就是首先需要会写窗口(winform)程序,通过窗口程序进行加载DLL 进行方法的调用。同时窗口程序相当于一个服务程序,在客户端启动的同时,运行一个websocket 服务,
   winform 服务端简化代码  C#  fleck  websocket 服务端 代码

dic_Sockets  = new Dictionary<string, IWebSocketConnection>();
                        server  = new WebSocketServer("ws://127.0.0.1:8887");//监听所有的的地址
                        server.RestartAfterListenError = true;
                        server.Start(socket =>
                        {
                            socket.OnOpen = () =>   //连接建立事件
                             {
                                 //获取客户端网页的url
                                  string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                 if (dic_Sockets.Count < clientCountLimit)
                                 {
                                          dic_Sockets.Add(clientUrl, socket);
                                            Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");
                              
                               };
                                 socket.OnClose = () =>  //连接关闭事件
                                 {
                                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                     //如果存在这个客户端,那么对这个socket进行移除
                                     if (dic_Sockets.ContainsKey(clientUrl))
                                     {
                                         dic_Sockets.Remove(clientUrl);
                                     }
                                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");
                                 };
                                 socket.OnMessage = message =>  //接受客户端网页消息事件
                                 {
                                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);
                                    
                                 };
                        });
活字格页面  websocket 客户端

添加一个按钮,在按钮上添加JavaScript 命令
var wsImpl = window.WebSocket || window.MozWebSocket;
window.ws = new wsImpl('ws://127.0.0.1:8887/111');
var page = Forguncy.Page;
var txt = page.getCell("txt");
ws.onmessage = function (evt) {
    var str = txt.getValue();
    txt.setValue(str+"收到服务器消息: "+evt.data+"\r\n");   
};
ws.onopen = function () {
   page.getCell("txt").setValue("open server...\r\n");
};
ws.onclose = function () {
   var str = txt.getValue();
   txt.setValue(str+"close...\r\n");
}
建立连接,
在添加一个发送消息按钮,同时编写JavaScript 命令
var senddata = {code: 0, command: "xxx"};
var message = JSON.stringify(senddata);
console.log(message );
ws.send(message );

浏览器向窗口服务发送消息,
服务端接收消息,解析  command 命令

执行相应的命令调用本地的DLL 将返回结果回传给浏览器。








评分

参与人数 2金币 +200 满意度 +5 收起 理由
阿享 + 5
Joe.xu + 200 很给力!

查看全部评分

1 个回复

倒序浏览
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-8 17:26:46
沙发
don't say so much ,直接上金币
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部