Websocket如何? - 页 4

 
Алексей Барбашин:

费多尔,你在哪里?

我实际上坐在这里,呆若木鸡。

一个弹出的窗口是Usercontrol。这就是全部。

 

找到了这个例子。

using System;
using System.Text;
using System.Threading.Tasks;
using System.Net.WebSockets;
using System.Threading;
using System.Net;

namespace BinaryWSDemo
{
    class BinaryWS
    {
        private ClientWebSocket ws = new ClientWebSocket();
        private Uri uri = new Uri("wss://ws.binaryws.com/websockets/v3?app_id=1089");
            
        public async Task SendRequest(string data)
        {
                
                while(this.ws.State == WebSocketState.Connecting){};
            if (this.ws.State != WebSocketState.Open)
            {
                throw new Exception("Connection is not open.");
            }
            
            var reqAsBytes = Encoding.UTF8.GetBytes(data);
            var ticksRequest = new ArraySegment<byte>(reqAsBytes);

            await this.ws.SendAsync(ticksRequest,
                WebSocketMessageType.Text,
                true,
                CancellationToken.None);
            
            Console.WriteLine("The request has been sent: ");
            Console.WriteLine(data);
            Console.WriteLine("\r\n \r\n");

            
        }
        
        public async Task StartListen(){
                WebSocketReceiveResult result;
                while (this.ws.State == WebSocketState.Open){
                var buffer = new ArraySegment<byte>(new byte[1024]);
                    do
                    {
                        result = await this.ws.ReceiveAsync(new ArraySegment<byte>(buffer.Array), CancellationToken.None);

                        if (result.MessageType == WebSocketMessageType.Close)
                        {
                                Console.WriteLine("Connection Closed!");
                                break;
                        }
                        else
                        {
                            var str = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                            Console.WriteLine("Received Data at: " + DateTime.Now);
                            Console.WriteLine(str);
                            Console.WriteLine("\r\n");
                        }

                    } while (!result.EndOfMessage);
                }
        }
        
        public async Task Connect(){
                Console.WriteLine("Prepare to connect to: " + this.uri.ToString());
                Console.WriteLine("\r\n");
                
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
                await ws.ConnectAsync(uri, CancellationToken.None);
                
                Console.WriteLine("The connection is established!");
                Console.WriteLine("\r\n");
        }

        static void Main(string[] args)
        {
            
                        string data = "{\"ticks\":\"R_100\"}";
            
                        var bws = new BinaryWS();
                        bws.Connect().Wait();
                        
                        bws.SendRequest(data).Wait();
                        bws.StartListen();
            
            Console.ReadLine();
        }
    }
}

试图在Visual Studio 中运行的代码是C#。

 
Алексей Барбашин:

这不会起作用,ClientWebSocket不是在所有的windows版本中都被支持

我已经为你提供了一个行之有效的方法,但你想走自己的路,得到自己的颠簸。这是你的权利。

那么你就不需要陷入尖锐。如果你擅长java,你可以用它来编写dll。

我并没有说我擅长java。我安装了它,创建了一个项目,我不知道接下来该怎么做。我需要寻找例子。

 
Алексей Барбашин:

费多尔,在论坛上寻求帮助的目的是什么?没有人会给你一个现成的例子,因为每个项目都是独一无二的。只有砖头可以是一样的。这正是他们为你提供的。

让我们从一个简单的问题开始:你有任何编程经验吗?至少在mql中?你知道编程中的 "类 "是什么吗?

是的,当然了。

 
Fedor Arkhipov:

大家好!

我有一个任务,通过websocket接收huobi的报价,并使用这些报价建立一个离线图表。

我意识到,这不能用标准手段来完成。

我有 一个想法,用java写一个dll,用它来接收报价。

这样的实施有可能吗?

我以前从来没有做过这样的事情,所以我将非常感谢您的帮助。

如果你想用Mql DLL来调用Java,它比通过gp的扁桃体更酷 :-)

但如果你真的想,你可以。但除此之外,你还必须对C语言有足够的了解,并理解线程在MT内部是如何安排的,如何以及何时创建/转换。

有很多关于如何与Java和C/C++做朋友的文章,在谷歌上一搜就能找到https://www.codeproject.com/Articles/993067/Calling-Java-from-Cplusplus-with-JNI。

查看本地文章:如何与C/C++和Mql做朋友

你可以坐下来做Mql->(c/c++ dll)->Java层。在调试方面,它似乎很有母性(情绪要控制住),但一旦完成后再使用。

PS/而且有一种感觉,Mql正在向Sharp方向发展,它对Java完全不友好......所以在第6版中的努力将被浪费掉。

Calling Java from C++ with JNI
  • cth027
  • www.codeproject.com
How do we return an array of integers from Java to C++. And this question follows up to 2d and 3d arrays as well. Also what would be the method to call Java function (assuming we are calling static function). Example: ID: method = m_pJVMInstance->m_pEnv->GetStaticMethodID(class, "getIntDataS", "([Ljava/lang/String;)[I"); Calling: jint...
[删除]  
Fedor Arkhipov:

我并没有说我非常了解java。我安装了它,创建了一个项目,我不知道接下来该怎么做。我需要寻找例子。

现实一点,你能处理好客户/服务器之间的协议吗?找一个现成的libu来交换,否则你会被淹死。

 
Алексей Барбашин:

是的,俄罗斯版本。


 
Алексей Барбашин:

我们应该一步一步来吗?:)

好吧,如果你帮助我。
 
Алексей Барбашин:

我当然会。我希望我不是唯一的一个。只是尝试更积极地回应信息。

好的