刘弘扬fine 2024-11-07 10:54 采纳率: 50%
浏览 18
已结题

解决websocket跟c#客户端通信

架构是这样的,前端vue,后端java,c#端打包成exe提供给成百上千的用户端下载(c#的功能就是从服务器端下载这个word到用户端本机)。前端vue以及java,都部署在阿里云的远程服务器上面在,c#项目发布的exe安装包在成百上千的用户端下载安装。目前希望解决websocket服务端(在java后台编写)跟c#的客户端实现通信的问题。现在有一个需求,张三登录前端系统后,在浏览器里面点击一个word文档的标题, 然后java服务端获取到这个文档的标题以及路径,通过java的websocket跟张三用户本机的websocket来通信,例如发送消息报文类似的,现在存在一个问题,c#的exe在用户端安装后,就会跟java服务端的websocket服务端连接上,假如现在有成百上千的websocket连接,当前登录人张三,如何把这个报文信息,发送给一对一的张三连接的websocket呢,c#端没有任何用户信息,就是一个简单的安装包。我本来计划是在c#端获取用户磁盘序列号存储在c盘里面,然后试着在java端也获取磁盘的序列号来跟c#相互对比,从而发送报文到张三,但是发现,java服务部署在服务器端,不能获取到用户端的磁盘序列号。

  • 写回答

23条回答 默认 最新

  • wanghui0380 2024-11-08 16:19
    关注

    额,有问题需要解释“张三登录前端系统后,在浏览器里面点击一个word文档的标题,”
    你先解释这个,我们才能回答。我们需要知道浏览器和你说的exe是什么关系

    exe用webview加载浏览器?还是你的exe是exe,浏览器是浏览器,他们没任何关系??

    为啥知道这个呢?因为我们如果exe内置webview,他可以有办法直接和内置webview通信。
    如果exe是exe,浏览器是浏览器。你看qq,百度网盘怎么弄的。qq是 url protocol方案,百度网盘和迅雷是浏览器插件。
    当然exe本地内置一个ws service,你网页连接本地ws,直接向本地ws请求,再由本地ws向远端代理请求也可以
    不过这种需要多做一步,假设网页连接不到本地ws,需要提示客户先打开本地exe。比如百度网盘,你点击下载,如果你没打开百度网盘,百度网盘会告诉你请先打开百度网盘,同时他会利用插件弹出对话框去启动exe。当然如果我们禁用插件,在客户端没先开exe的情况下,百度网盘也没用,只会提示你“请先安装百度网盘”

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(22条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月7日