由于工作的一些原因要使用不通过请求来使网页和桌面程序之间相互发送消息,想来想去还是用websocket之前也百度过一些其他的方法但发现有限制系统问题就给抛弃了。
websoket利用本地电脑的端口来使网页和桌面程序通信,桌面程序设置为服务端,网页设置为客户端。
下载插件:https://download.youkuaiyun.com/download/qq_35319925/10231896
List<IWebSocketConnection> allSockets;
WebSocketServer server;
//创建服务器
FleckLog.Level = LogLevel.Debug;
allSockets = new List<IWebSocketConnection>();
server = new WebSocketServer("ws://0.0.0.0:7182");//设置ip和端口号(端口号是本地电脑的端口号通讯时其他电脑不能参与通信)
server.Start(socket =>
{
socket.OnOpen = () =>
{
allSockets.Add(socket);//打开通讯
};
socket.OnClose = () =>
{
allSockets.Remove(socket);//关闭通讯
};
socket.OnMessage = message =>
{
allSockets.ToList().ForEach(ss => ss.Send(message));//接收的消息
};
});
//发送消息
var input = "hello world";
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
创建客户端程序
<script type="text/javascript">
var start = function () {
var inc = document.getElementById('incomming');
var wsImpl = window.WebSocket || window.MozWebSocket;
var form = document.getElementById('sendForm');
var input = document.getElementById('sendText');
inc.innerHTML += "connecting to server ..<br/>";
// create a new websocket and connect localhost
window.ws = new wsImpl('ws://localhost:7182/');//ip、端口号和服务端一致
// when data is comming from the server, this metod is called
ws.onmessage = function (evt) {
inc.innerHTML += evt.data + '<br/>';//接收服务器消息
};
// when the connection is established, this method is called
ws.onopen = function () {
inc.innerHTML += '.. connection open<br/>';//打开通讯
};
// when the connection is closed, this method is called
ws.onclose = function ()
{
inc.innerHTML += '.. connection closed<br/>';//关闭通讯
}
form.addEventListener('submit', function (e) { //.. connection closed
e.preventDefault();
var val = input.value;
ws.send(val);//客户端向服务端发送消息
input.value = "";
document.getElementById("i").src = "";
});
}
window.onload = start;
</script>
<form id="sendForm">
<input id="sendText" placeholder="Text to send" />
<img src="" id="i" />
</form>
<pre id="incomming"></pre>