以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]已知Websocket服务器地址,请教如何在FOX端接收并保存接受的数据 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=185679) |
-- 作者:WELOVEFOX -- 发布时间:2023/3/9 17:22:00 -- [求助]已知Websocket服务器地址,请教如何在FOX端接收并保存接受的数据 向各位大佬及蓝板请教下:已知Websocket服务器地址,请教如何在FOX端接收并保存接受的数据。 再细细说明下:不是说在FOX中建立Websocket服务器,而是说:已经有存在的其它正常运行的Websocket服务器,有明确的WS地址及端口. 希望: 1.FOX端中制作客户端与这个WS服务器建立连接。 2.接收服务器发送的信息,并保存。(这个应该都是JSON的东西,只要FOX能获取,用FOX拆分成数组保存到FOX中的表或数据库中) 如果FOX能做到,代码方面要注意的地方及如何处理(我看了html代码目前所想到的): 1.如判断服务器正常运行,握手成功,再接收信息。 2.如果服务器断线,重新握手接收信息。 3.接收信息是持续的,是不是要采用异步函数之类的,防止FOX客户端不能其它操作。 查了下坛里面的帖子,也好少这方面的知识,因为CS编程基础及BS基础都比较薄弱,百度了好久,C#或有现成的github上有其它人现成的DLL,不会引用使用。 而HTML端的代码找到,并扒了下来,也能正常运行,如果将这个静态HTML模板改写成FOXWEB端,水平真的不足,估计还要学好久。 网上找javascript转VB.NET没找到。 HTML端的示例 以下内容为程序代码: 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <html> 3 <head> 4 <title>websocket client</title> 5 <script type="text/javascript"> 6 var start = function () { 7 var inc = document.getElementById(\'incomming\'); 8 var wsImpl = window.WebSocket || window.MozWebSocket; 9 var form = document.getElementById(\'sendForm\'); 10 var input = document.getElementById(\'sendText\'); 11 12 inc.innerHTML += "connecting to server ..<br/>"; 13 14 // create a new websocket and connect 15 window.ws = new wsImpl(\'ws://127.0.0.1:777/\'); 16 17 // when data is comming from the server, this metod is called 18 ws.onmessage = function (evt) { 19 inc.innerHTML += evt.data + \'<br/>\'; 20 }; 21 22 // when the connection is established, this method is called 23 ws.onopen = function () { 24 inc.innerHTML += \'.. connection open<br/>\'; 25 }; 26 27 // when the connection is closed, this method is called 28 ws.onclose = function () { 29 inc.innerHTML += \'.. connection closed<br/>\'; 30 } 31 32 form.addEventListener(\'submit\', function (e) { 33 e.preventDefault(); 34 var val = input.value; 35 ws.send(val); 36 input.value = ""; 37 }); 38 39 } 40 window.onload = start; 41 </script> 42 </head> 43 <body> 44 <form id="sendForm"> 45 <input id="sendText" placeholder="Text to send" /> 46 </form> 47 <pre id="incomming"></pre> 48 </body> 49 </html> 谢谢阅读。 [此贴子已经被作者于2023/3/10 21:10:20编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/3/9 17:29:00 -- 使用第三方的组件:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=158906&replyID=&skin=1 |
-- 作者:WELOVEFOX -- 发布时间:2023/3/9 17:34:00 --
[此贴子已经被作者于2023/3/9 17:36:55编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/3/9 17:36:00 -- 用不了。Foxtable仅支持到.net 4.0.这个是4.5以上才能使用的类型 |
-- 作者:chen37280600 -- 发布时间:2023/3/9 17:59:00 -- 我分享的帖子里,有提供那个websocket的dll下载,是针对.net4进行编译的,没理由不能用。 除非是你的服务器端websocket,有些参数特性,是超越4.0,例如什么ssl要求,才会用不到
|
-- 作者:WELOVEFOX -- 发布时间:2023/3/9 18:12:00 -- 谢谢杰哥,我试过不知是不是那个16年播放音乐那个DLL冲突还是其它原因导致, 现在去除这个音乐DLL,也参照你的例子用了这个Websocket的DLL,还是会出错是, 不知道是不是我FOX出问题,试过重装一样。 因为对这类方面的知识不高,不是用这个Websocket的DLL自建的服务器, 而是别人给的websocket现成exe可执行端。不知道它的运行方式,只知道它会不断发包出来。 是不是引用这个 [免费开源]狐表bs集成websocket方法,dll来源于github 3.5k高分数的C# Websocket库 稳定性和兼容性非常好 。 相当于web bs领域的OpenQQ功能 里面的Websocket的DLL,也能接收第3方的WS服务器的信息,谢谢。
|
-- 作者:chen37280600 -- 发布时间:2023/3/9 22:18:00 -- 应该是别人的websocket都能连接的,因为这种协议的公开标准的。而且它是c#的高分开源东西,应该兼容性很强,只是你要认真研究怎么用 |
-- 作者:WELOVEFOX -- 发布时间:2023/3/10 11:51:00 -- 谢谢蓝版,再请教下。 迫着自己去学了一下WEB方面,我将html静态页面,改为用FOX制作WEB端, 已经将第一个简单的HTML模板转换到FOX了,但是不会写将获取的内容写入到数据库。 主要httprequest代码: Select Case e.Path Case "get" Dim sb As New StringBuilder sb.AppendLine("<!DOCTYPE HTML PUBLIC>") sb.AppendLine("<html>") sb.AppendLine("<head>") sb.AppendLine("<title>websocket client</title>") sb.appendline("<script src=\'./css/g.js\'></script>") sb.AppendLine("</head>") sb.AppendLine("<body>") sb.AppendLine("<form id=\'sendForm\'>") sb.AppendLine("<span>输入内容按回车发送消息</span> <br/>") sb.AppendLine("<input id=\'sendText\' placeholder=\'Text to send\' />") sb.AppendLine("</form>") sb.AppendLine("<pre id=\'incomming\'></pre>") ‘这段应该就是调用ID incomming,不断在前端页面刷新接收到的每一条信息。 sb.AppendLine("</body>") sb.AppendLine("</html>") e.WriteString(sb.ToString) End Select 也将javascript部分改为引用外部文件g.js 代码是: 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 += "连接服务器..<br/>"; // 创建一个新的websocket并连接 window.ws = new wsImpl(\'ws://127.0.0.1:777/\'); // 当数据来自服务器时,将调用此方法 ws.onmessage = function (evt) { //不断刷新接收来自服务器的信息; inc.innerHTML = (evt.data); }; // 当建立连接时,将调用此方法 ws.onopen = function () { inc.innerHTML += \'已建立连接.. <br/>\'; }; // 当连接关闭时,将调用此方法 ws.onclose = function () { inc.innerHTML += \'连接已关闭.. <br/>\'; } form.addEventListener(\'submit\', function (e) { e.preventDefault(); var val = input.value; ws.send(val); input.value = ""; }); } window.onload = start; 经常这样构造,和普通静态的HTML模板运行的效果是一样的,也能正确收到信息了。 如何将刷新的每一条incomming字符内容保存到指定的数据库里面呢? 基础差,只能想到应该是将下面红色代码改造一下,WEB端基础差了点,实在不会加进去了,还请示范下,谢谢。 Dim dr As DataRow = DataTables("记录表").SQLAddNew() dr("内容") = e.Values("incomming") dr.Save() \'用SQLAddNew增加的行,必须保存一下,否则会被丢弃. |
-- 作者:有点蓝 -- 发布时间:2023/3/10 12:06:00 -- js …… // 当数据来自服务器时,将调用此方法 ws.onmessage = function (evt) { //不断刷新接收来自服务器的信息; inc.innerHTML = (evt.data); sendAjaxText(evt.data,"accept.htm","",false); }; …… httprequest事件 Select Case e.Path Case "get" Dim sb As New StringBuilder sb.AppendLine("<!DOCTYPE HTML PUBLIC>") sb.AppendLine("<html>") sb.AppendLine("<head>") sb.AppendLine("<title>websocket client</title>") sb.appendline("<script src=\'./css/g.js\'></script>") sb.AppendLine("</head>") sb.AppendLine("<body>") sb.AppendLine("<form id=\'sendForm\'>") sb.AppendLine("<span>输入内容按回车发送消息</span> <br/>") sb.AppendLine("<input id=\'sendText\' placeholder=\'Text to send\' />") sb.AppendLine("</form>") sb.AppendLine("<pre id=\'incomming\'></pre>") ‘这段应该就是调用ID incomming,不断在前端页面刷新接收到的每一条信息。 sb.AppendLine("</body>") sb.AppendLine("</html>") e.WriteString(sb.ToString) Case "accept.htm" Dim dr As DataRow = DataTables("记录表").SQLAddNew() dr("内容") = e.PlainText dr.Save() e.WriteString("OK") End Select [此贴子已经被作者于2023/3/10 12:07:14编辑过]
|
-- 作者:WELOVEFOX -- 发布时间:2023/3/10 13:42:00 -- 谢谢。试过,获取不到,而且这样另用页面获取不能达到自动保存。需要不断刷新? accept.htm代码改为下面,也显示未收到信息,后端保存的也确实一条空白数据, 我的意思是在这个前端get单页面内将不断接收到的信息,直接保存给数据库,不用额外accept.htm接收,这样不断刷新accept.htm来保存不现实 ![]() 接收到的应该是{}的JSON字符串,不处理JSON也没关系,就是希望将这段字符串同时保存到后台数据里。 Case "accept.htm" \' Dim dr As DataRow = DataTables("记录表").SQLAddNew() \' dr("内容") = e.PlainText \' dr.Save() \' e.WriteString(e.PlainText) If e.PlainText > "" Then e.WriteString("服务器收到以下数据:" & vbcrlf & e.PlainText) Else e.WriteString("服务器未收到数据") End If 见运行图 [此贴子已经被作者于2023/3/10 13:45:59编辑过]
|