一、 有部分场景浏览器是无法调用本地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 将返回结果回传给浏览器。
|