文章 "MetaTrader 5 中的 WebSockets" - 页 2 12345 新评论 Roman 2021.01.22 06:12 #11 Renat Fatkhullin:你只是不了解或不知道如何使用 这一功能。该功能会立即给出输入缓冲区中 可用的字节数,但不会告诉你套接字是否还活着。这个函数非常重要,它允许你不进入同步等待,而是在不失去对程序控制的情况下逐段读出数据。TLS 功能也是正确的--它们是为受过培训的用户 提供的,这些用户知道如何使用以及使用的顺序。它们不是为那些 "调用后就完事了 "的人准备的。不仅如此,socket 和 TLS 函数的纯粹形式与终端用于原始/tls/https 连接的函数相同。也就是说,一切运行正常。在我们的高负载解决方案中,这些实现方式也是一样的。 原始网络函数不适合初学者,也不适合天真地使用。我们应该充分了解网络交互的原理和特殊性。如果我们谈论的是 TLS,那么就需要了解处理握手过程的方法和顺序。 该函数没有缓冲区参数。 我不知道你说 的是什么理解,也不知道是针对哪些用户,伊利亚斯发现了这个错误,并将其视为一个错误。 关键是所有用户都是以套接字文档中的示例为导向的。 问题在于函数 SocketIsReadable(socket) 的返回值并不明确,对于 wss 而言是:frame。 Документация по MQL5: Сетевые функции / SocketIsReadable www.mql5.com SocketIsReadable - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Roman 2021.01.22 06:26 #12 Stanislav Korotky:这背后有什么道理吗?这个神奇的数字是什么,为什么信息长度为 256 或 1500 就没有问题? 理由是什么?我不知道。变量中的数字读取没有问题。 你可以把它设为最大值,这不会影响任何事情。 string CWs::Recv() { uchar rsp[]; //, res[]; string result = ""; //uint timeout_check = GetTickCount() + timeout; //做 //{ uint len = 65536; //SocketIsReadable(socket); //if(len) //{ int rsp_len = SocketTlsReadAvailable(socket, rsp, len); //if(rsp_len > 0) //{ /ArrayInsert(res, rsp, ArraySize(res), 0); //断开; //} //} //} //while(GetTickCount() < timeout_check && !IsStopped()); if(rsp_len > 0) //(ArraySize(res) > 0) result = Unpack(rsp, ArraySize(rsp)); return(result); } 通过SocketIsReadable(socket)函数,你可以知道读取时会出错。 SocketIsReadable(socket) 在 len 中返回的内容与SocketTlsRead() 和 SocketTlsReadAvailable() 中的内容不符。 Документация по MQL5: Сетевые функции / SocketIsReadable www.mql5.com SocketIsReadable - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Renat Fatkhullin 2021.01.22 07:47 #13 Roman:该函数没有缓冲区参数。 我不知道你说 的是哪种理解,也不知道是针对哪些用户,这个错误是 Ilyas 发现的,我想他把它当成了一个错误。 关键是所有用户都以套接字文档中的示例为导向。 问题在于函数 SocketIsReadable(socket) 的返回值并不清楚,对于 wss: frame 而言,它返回的是什么。 所以,你根本不了解套接字及其缓冲区,却教给我们错误。SocketIsReadable 检查传入缓冲区中原始数据的大小肯定不符合处理加密数据的 Tls 函数的要求。把它当作一个错误"--人们总能把任何简洁的回答当作认罪。请给出明确的答案。 Roman 2021.01.22 08:01 #14 Renat Fatkhullin: 所以,你根本不了解插座及其缓冲区,却教给我们错误。 。 在 SocketIsReadable 中检查传入缓冲区中原始数据的大小肯定不符合 Tls 函数,因为 Tls 函数处理的是接收到的较小的加密数据。 您写到了SocketIsReadible 函数的缓冲区,但如果用户无法使用该缓冲区,那么提到它就很奇怪了。 Renat Fatkhullin 2021.01.22 08:02 #15 请阅读文章并查看建议的代码。在我们讨论一个复杂协议的实施质量时,声称几行无法重现的代码存在错误是很奇怪的。 Renat Fatkhullin 2021.01.22 08:05 #16 Roman:问题是关于SocketIsReadible 函数的,该函数有一个内部缓冲区,这一点很清楚。 你写的是SocketIsReadible 函数的缓冲区,但如果用户无法使用该 缓冲区,那么提到它就很奇怪了。 我再次重复--你不了解套接字,也不知道它们的特殊性。你甚至错误地认为SocketIsReadable 的"内部 "缓冲区并不存在。套接字中的缓冲区是谁的?由谁管理?它们是如何工作的?因此,当现实与天真的认知出现偏差时,错误声明就会被滥用。 Roman 2021.01.22 08:10 #17 Renat Fatkhullin: 被当作错误"--人们总是把任何整齐划一的回答误认为是认罪。给我一个明确的答案。 . Renat Fatkhullin 2021.01.22 08:20 #18 Roman:. 他回答的第一部分是正确的,它解释了原始数据和解密数据大小的区别。但最后一个答案是以拐杖的形式出现的私人情况(固定大小)。这很可能是在另一段三行代码的背景下,除了私下修正/拐杖之外,什么都不能提供。Ilyas 不处理套接字。没有错误确认。供参考:我在 MT5 中编写了原始套接字、tls、https 及其衍生物的实现。自 1995 年以来,我还编写了数十个网络协议 的实现。因此,与我争论是很奇怪的。数以千万计的设备都在使用我的实现。 Roman 2021.01.22 08:40 #19 Renat Fatkhullin: 答案的第一部分是正确的,它解释了原始数据和解密数据大小的区别。 但最后一个答案是以拐杖的形式私下进行的案例(修正大小)。最有可能的情况是,在另一段三行代码的背景下,除了私下更正/拐杖之外,什么都不能提供。 Ilyas 不处理套接字。没有错误确认。 供参考:我在 MT5 中编写了原始套接字、tls、https 及其衍生物的实现。自 1995 年以来,我还编写了数十个网络协议的实现。 因此,与我争论是很奇怪的。数以千万计的设备都在使用我的实现。 我理解您无可争议的经验。但这篇文章并没有揭示如何在 MQL 中正确使用 wss: 的问题! 因为文章的作者和所有其他(甚至高级)用户都不了解这一点。 这就是为什么我在我的实现中使用固定大小作为拐杖。 请在考虑到SocketIsReadable 池的情况下,向我展示 MQL 中正确的 wss: 框架读取方法,每个人都会说谢谢。 Renat Fatkhullin 2021.01.22 10:06 #20 Roman:我理解您无可争议的经验。但这篇文章并没有揭示如何在 MQL 中正确使用 wss: 的问题! 因为这篇文章的作者并不像所有其他用户(即使是高级用户)一样了解这一点。 这就是为什么我在实现中使用固定大小作为拐杖。请在考虑到SocketIsReadable 池的情况下,向我展示 MQL 中正确的 wss: 框架读取方法,每个人都会说谢谢。 我现在没有时间,但我应该在标准 MQL5库中 制作一套 CSocketRaw、CSocketTLS、CSocketHTTP 实现。 如果我有 8 个小时的空闲时间,我会做的。 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你只是不了解或不知道如何使用 这一功能。
该功能会立即给出输入缓冲区中 可用的字节数,但不会告诉你套接字是否还活着。这个函数非常重要,它允许你不进入同步等待,而是在不失去对程序控制的情况下逐段读出数据。
TLS 功能也是正确的--它们是为受过培训的用户 提供的,这些用户知道如何使用以及使用的顺序。它们不是为那些 "调用后就完事了 "的人准备的。
不仅如此,socket 和 TLS 函数的纯粹形式与终端用于原始/tls/https 连接的函数相同。也就是说,一切运行正常。在我们的高负载解决方案中,这些实现方式也是一样的。
原始网络函数不适合初学者,也不适合天真地使用。我们应该充分了解网络交互的原理和特殊性。如果我们谈论的是 TLS,那么就需要了解处理握手过程的方法和顺序。该函数没有缓冲区参数。
我不知道你说 的是什么理解,也不知道是针对哪些用户,伊利亚斯发现了这个错误,并将其视为一个错误。
关键是所有用户都是以套接字文档中的示例为导向的。
问题在于函数 SocketIsReadable(socket) 的返回值并不明确,对于 wss 而言是:frame。
这背后有什么道理吗?这个神奇的数字是什么,为什么信息长度为 256 或 1500 就没有问题?
理由是什么?我不知道。变量中的数字读取没有问题。
你可以把它设为最大值,这不会影响任何事情。
通过SocketIsReadable(socket)函数,你可以知道读取时会出错。
SocketIsReadable(socket) 在 len 中返回的内容与SocketTlsRead() 和 SocketTlsReadAvailable() 中的内容不符。
该函数没有缓冲区参数。
我不知道你说 的是哪种理解,也不知道是针对哪些用户,这个错误是 Ilyas 发现的,我想他把它当成了一个错误。
关键是所有用户都以套接字文档中的示例为导向。
问题在于函数 SocketIsReadable(socket) 的返回值并不清楚,对于 wss: frame 而言,它返回的是什么。
所以,你根本不了解插座及其缓冲区,却教给我们错误。 。
您写到了SocketIsReadible 函数的缓冲区,但如果用户无法使用该缓冲区,那么提到它就很奇怪了。
问题是关于SocketIsReadible 函数的,该函数有一个内部缓冲区,这一点很清楚。
你写的是SocketIsReadible 函数的缓冲区,但如果用户无法使用该 缓冲区,那么提到它就很奇怪了。
.

.
答案的第一部分是正确的,它解释了原始数据和解密数据大小的区别。
我理解您无可争议的经验。
但这篇文章并没有揭示如何在 MQL 中正确使用 wss: 的问题!
因为文章的作者和所有其他(甚至高级)用户都不了解这一点。
这就是为什么我在我的实现中使用固定大小作为拐杖。
请在考虑到SocketIsReadable 池的情况下,向我展示 MQL 中正确的 wss: 框架读取方法,每个人都会说谢谢。
我理解您无可争议的经验。
但这篇文章并没有揭示如何在 MQL 中正确使用 wss: 的问题!
因为这篇文章的作者并不像所有其他用户(即使是高级用户)一样了解这一点。
这就是为什么我在实现中使用固定大小作为拐杖。
请在考虑到SocketIsReadable 池的情况下,向我展示 MQL 中正确的 wss: 框架读取方法,每个人都会说谢谢。
我现在没有时间,但我应该在标准 MQL5库中 制作一套 CSocketRaw、CSocketTLS、CSocketHTTP 实现。
如果我有 8 个小时的空闲时间,我会做的。