"DLL'leri Kullanmadan Adlandırılmış Kanalları Kullanarak MetaTrader 5 ile İletişim Kurma" makalesi için tartışma - sayfa 3
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Terminaller arasındaki iletişim konusunun küçük bir uygulama oranına sahip olduğunu düşünüyorum.
Ancak dış sistemlerle iletişim daha önemli ve uygulanabilir. Güvenli kanal bunun için açıldı.
Kimse buna itiraz etmiyor, yani her şeyin ne için yapıldığının beyan edilmesine. Ancak sorun bunun nasıl uygulandığıdır. Sonuçta harici sistemler illa ki C dilinde yazılmak zorunda değil, farklı programlama dillerinde de oluşturulabilir. Ve birçok programlama dilinde adlandırılmış bir kanal aracılığıyla terminale sadece dosya işlemleri aracılığıyla bir istemci olarak bağlanmak mümkündür. Ancak teknoloji istemci-sunucu olarak seçildi, yani iki istemci arasında bir köprü - ağ geçidi olmadan bir boşluk varsa birbirleriyle karşılaşmayacak şekilde. Yani ya istemci-istemci teknolojisi ya da bir ağ geçidi sağlanmalıydı. Ve böylece büyükbaba Krylov'un "Tilki ve Üzüm" masalındaki gibi oldu:
Göz görse de,Ama göz göremez.
© I. Krylov
Diğerlerinin dış sistemlerle benzer bir bağlantıyı nasıl gerçekleştirdiklerine bakmak gerekiyordu. Örneğin: VMWare, MS SQL Server, MySQL, harici modemler vb. Sunucu kısımları dahili olarak uygulanmaktadır. Ve herhangi bir koltuk değneği olmadan, adlandırılmış bir kanal veya TCP/IP ve diğer iletişim kanalları aracılığıyla bile katılmak çok uygundur. Ve hatta, örneğin, adlandırılmış bir kanal aracılığıyla, ancak "Named Pipe TCP Proxy" yardımcı programının yardımıyla TCP / IP üzerinden uzaktan seçim yapabilirsiniz. Yani, kullanıcıların herhangi bir ek koltuk değneği oluşturmasına gerek yoktur, ancak yalnızca en uygun istemci uygulamasını seçer ve hemen bağlanır ve çalışır.
MQL5'in güvenli bir uygulama ortamı olduğunu ve açıkça sunucu işlevleri oluşturmanın mantıksız olduğu bir istemci ortamı olduğunu göz önünde bulundurun.
Sunucu işlevselliğinin beyan edildiğinden emin değilim. İstemci işlevselliği planlandı ve uygulandı.
Sanırım ağ geçidi için kodu hazırladım. Henüz test etmedim. MinGW'yi indirip kuracağım ve neyin yanlış olduğunu göreceğim.
MinGW kuruldu, yapılandırıldı ve NetBeans'e bağlandı.
İki sunucu kanalından tam çift yönlü bir ağ geçidi oluşturma ve bilgileri bir kanaldan diğerine istemcilere yeniden yönlendirme fikri işe yaramadı. Bir sunucu alt işlemi bir kanalı okur ve ikincisi ona bir şey gönderirse, tam çift yönlü çalışmaz (en azından Windows XP'de), çünkü bazen kanaldan okuyan alt işlem, aynı kanala yazan alt işlemden gelen mesajları keser ve bilgileri geri döndürür.
Alt işlemlerden birini kaldırırsanız, iletim istemciden istemciye sorunsuz bir şekilde tek yönlü olarak gider.
Bununla birlikte, her şey kaybolmaz, çünkü örtüşen bir mod da vardır, yani iki değil, sadece bir kanal oluşturulduğunda ve birkaç istemci aynı anda ona bağlandığında. Bu durumda sunucunun her zaman kanaldan bilgi okumasına gerek yoktur, çünkü her şey olaylara dayanır. Yani, herhangi bir istemci kanala bilgi gönderirse, sunucu onun olayını okur ve iletilen mesajı oradan çıkarır. Ve alınan bilgiyi ikinci istemciye yönlendirmek - bu zaten bir teknik meselesi. Böyle bir uygulama oluşturma sürecindeyim.
Bu kadar. Vazgeçtim. C++ koduyla ve hatta Win API ile uğraşmaktan yoruldum. Her şeyin nasıl çalışması gerektiğini anlamaya çalışmak için MSDN'deki dağınık bilgi parçalarını araştırmak kadar kodlama değil. Deneyim eksik, bu yüzden tüm bu şeyleri Servis Çalışmasına gönderdim. C++ kodunu iki yönlü tam çift yönlü bir ağ geçidine dönüştürün
Belki daha deneyimli biri bu işi kolayca halledebilir? Başarısızlıkların nedeninin adlandırılmış kanalların ayarlarını çözemediğimden kaynaklandığını göz ardı etmiyorum. Yani, bu ayarlarda doğru bir şey yazmanız gerekiyor olabilir ve her şey çalışabilir. Şimdiye kadar simpleks moddan başka bir şey yapmayı ve çalıştırmayı başaramadım.
Boru hatları aracılığıyla MQL ve AutoIt arasında dostluk kurmaya karar verdim.
Kısacası, sadece bir tırmık ve her yerde :)
Biraz şansla AutoIt'e aktarmayı başardım, sadece ilk 4 baytın atılması gerekiyordu, bazı "çöpler" var. Bu "saçmalık" nedir?
Sonra MQL'e aktarmayı denedim, burası daha da eğlenceli - hiçbir şey gelmiyor. Ya da belki de aktarımı doğru organize etmiyorum.... Belki de tüm sorun bu 4 bayttadır?
Bana ne söyleyebilirsiniz?
Boru hatları aracılığıyla MQL ve AutoIt arasında dostluk kurmaya karar verdim.
Kısacası, sadece bir tırmık ve her yerde :)
Biraz şansla AutoIt'e aktarmayı başardım, sadece ilk 4 baytın atılması gerekiyordu, bazı "çöpler" var. Bu "saçmalık" nedir?
Sonra MQL'e aktarmayı denedim, burası daha da eğlenceli - hiçbir şey gelmiyor. Ya da belki de aktarımı doğru organize etmiyorum.... Belki de tüm sorun bu 4 bayttadır?
Bana ne söyleyebilirsin?
Yani sen de mi oradasın?
Hayır, buradayım.) Yani, şöyle oldu:
MQL5
AutoIt
MQL'den AutoIt'e aktarımın bu kısmı. Şu şekilde çalışır.
Func ReadMsg($hPipe)'dan bir dize ile
İlk 4 baytı yiyorum ve her şey çalışıyor.
Soru: Bu ilk 4 bayt ne içeriyor?
İlk 4 baytı yiyorum ve her şey çalışıyor.
Soru: Bu ilk 4 bayt ne içeriyor?
Renat, MT4'te pip yapılması ne zaman planlanıyor?