错误、漏洞、问题 - 页 2706

 
Sergey Dzyublik:

这就是问题所在,ME中的错误标签没有日志。

我的不注意...

 

什么是代码556?

用EA做了30张图,在编译时,有些没有用这个代码恢复,有些则成功了。

 
Igor Zakharov:

什么是代码556?

使用EA的30个图表,在编译时,有些没有用这个代码恢复,其他的成功了。

打开 dip.ex5文件 的错误

显示完整的日志,而不是一张张的截图

 
包含日志的地方将尝试添加
 
Slava:

打开 dip.ex5文件 的错误

显示完整的日志,而不是一张张的截图

见附件。

附加的文件:
20200415.zip  5 kb
 

谁能告诉我如何将TLS套接字与echo服务器做朋友?从例子中提取了源代码,添加了头文件。在80端口,它进行了升级,但在443端口,它连接并获得了一个证书,但随后无法从头文件中读取任何东西。如果在调试器下执行,你可以看到SocketIsReadable 返回一个类似的数字,如245,但SocketTlsRead在没有返回任何东西的情况下就超时崩溃了。显然,需要来自MQ的神圣知识。

附加的文件:
 

Bug ME(build 2380)错误描述和参数信息中的函数模板参数签名不正确。

template<typename T>
class A{};

class B{
public:  
   template<typename T>
   static void test(A<T> &, A<int>* = NULL){
      int x = 1 / 0;                       //'0' - division by zero |  in template 'void B::test(B:: A<T>&,A<int>*)' specified with [T=long]
   }
};

void OnStart(){
   A<long> a;
   B::test(a);                             // Parameter info: void test([unknown] &, [unknown] *=NULL)
}
 
Stanislav Korotky:

谁能告诉我如何将TLS套接字与echo服务器做朋友?从例子中提取了源代码,添加了头文件。在80端口,它进行了升级,但在443端口,它连接并获得了一个证书,但随后无法从头文件中读取任何东西。 如果在调试器下执行,你可以看到SocketIsReadable返回一个类似的数字,如245,但SocketTlsRead在没有返回任何东西的情况下就超时崩溃了。显然,需要来自MQ的神圣知识。

我也没能用HTTPRecv得到一个字节的响应数组,以便进一步进行协议解析。
在超时时失败,因为ping pong是没有组织的,但要组织它,你需要先从服务器获得字节响应,而HTTPRecv 函数本身包含超时
但由于某些原因,HTTPRecv并没有解析这个字节的响应。

 
Roman:

我也没能使用HTTPRecv获得一个字节响应数组,以进一步进行协议解析。
它在超时时失败,因为ping pong是没有组织的,但要组织它,你需要先从服务器获得字节响应,而HTTPRecv 函数本身包含超时
但由于某些原因,HTTPRecv并没有解析这个字节的回复。

这只是连接本身。那里还没有ping - 它可以在websocket协议中稍后发生。障碍发生在服务器的响应头,当它必须确认升级时。当不使用TLS时,它可以正常连接。但在TLS中,看起来头到了终端,但没有从SocketTlsRead 返回。

 
Stanislav Korotky:

这只是连接本身。那里还没有ping - 它可以在websocket协议中稍后发生。障碍发生在服务器响应头,当它必须确认升级时。当不使用TLS时,它可以正常连接。但在TLS中,看起来头像到了终端,但没有从SocketTlsRead返回。

是的,我明白我的意思。
是的,在你的代码中,80端口的头会返回,443端口则不会。
重新看了一遍你的代码,没有看到SocketTlsHandshake 函数在那里。
你的代码没有进行握手。这可能是原因。
虽然这个功能的帮助说,如果你连接到443端口,就不需要这个功能。
所以一般来说很奇怪。

UPD:
不管我怎么放请求头,它还是会出现错误

ERR_NETSOCKET_IO_ERROR 5273  Ошибка отправки/получения данных из сокета


HTTP/1.1 400 Bad Request

也许开发商禁止接收升级到TLS?


UPD:
你的标头没有错误,但也没有响应标头。
HTTPRecv 函数中 一个打印,看看有什么东西进来了。

result += CharArrayToString(rsp, 0, rsp_len, CP_UTF8);
Print(result);

它只打印了一个字符H
这个字符让我觉得它是响应头的第一个字母,
,并且由于某种原因没有打印头的其余部分。

亲爱的开发者,你能告诉我们该怎么做吗?
这是一个有意的限制,还是TLS的一个错误?
我已经在这个问题上挣扎了很久,但没有成功。