Работа с Socket

 

Нужно реализовать связь через сокет. Терминал - Терминал. Терминал - Веб.
Нужна простенькая связь без каких либо сложных задач и большего код. Запись данных в сокет и считывание с его.

MQL5 предоставляет уже такую возможность

//+------------------------------------------------------------------+
//|                                                SocketExample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version     "1.00"
#property description "Для работы примера добавьте Address в список разрешенных в настройках терминала"
#property script_show_inputs
 
input string Address="111.111.111.111";
input int    Port   =80;
bool         ExtTLS =false;
//+------------------------------------------------------------------+
//| Отправка команды на сервер                                       |
//+------------------------------------------------------------------+
bool HTTPSend(int socket,string request)
  {
   char req[];
   int  len=StringToCharArray(request,req)-1;
   if(len<0)
      return(false);
//--- если используется защищенное TLS-соединение через порт 443
   if(ExtTLS)
      return(SocketTlsSend(socket,req,len)==len);
//--- если используется обычное TCP-соединение
   return(SocketSend(socket,req,len)==len);
  }
//+------------------------------------------------------------------+
//| Чтение ответа сервера                                            |
//+------------------------------------------------------------------+
bool HTTPRecv(int socket,uint timeout)
  {
   char   rsp[];
   string result;
   uint   timeout_check=GetTickCount()+timeout;
//--- читаем данные из сокета, пока они есть, но не дольше timeout
   do
     {
      uint len=SocketIsReadable(socket);
      if(len)
        {
         int rsp_len;
         //--- разные команды чтения в зависимости от того, защищенное соединение или нет
         if(ExtTLS)
            rsp_len=SocketTlsRead(socket,rsp,len);
         else
            rsp_len=SocketRead(socket,rsp,len,timeout);
         //--- разберем ответ
         if(rsp_len>0)
           {
            result+=CharArrayToString(rsp,0,rsp_len);
            //--- распечатаем только заголовок ответа
            int header_end=StringFind(result,"\r\n\r\n");
            if(header_end>0)
              {
               Print("Получен заголовок HTTP ответа:");
               Print(StringSubstr(result,0,header_end));
               return(true);
              }
           }
        }
     }
   while(GetTickCount()<timeout_check && !IsStopped());
   return(false);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int socket=SocketCreate();
//--- проверим хэндл
   if(socket!=INVALID_HANDLE)
     {
      //--- если всё в порядке, подключаемся
      if(SocketConnect(socket,Address,Port,1000))
        {
         Print("Установлено подключение к ",Address,":",Port);
 
         string   subject,issuer,serial,thumbprint;
         datetime expiration;
         //--- если соединение защищено сертификатом, выведем его данные
         if(SocketTlsCertificate(socket,subject,issuer,serial,thumbprint,expiration))
           {
            Print("Сертификат TLS:");
            Print("   Владелец:  ",subject);
            Print("   Издатель:  ",issuer);
            Print("   Номер:     ",serial);
            Print("   Отпечаток: ",thumbprint);
            Print("   Истечение: ",expiration);
            ExtTLS=true;
           }
         //--- отправим на сервер запрос GET
         if(HTTPSend(socket,"GET / HTTP/1.1\r\nHost: www.mql5.com\r\n\r\n"))
           {
            Print("GET-запрос отправлен");
            //--- прочитаем ответ
            if(!HTTPRecv(socket,1000))
               Print("Не удалось получить ответ, ошибка ",GetLastError());
           }
         else
            Print("Не удалось отправить GET-запрос, ошибка ",GetLastError());
        }
      else
        {
         Print("Подключение к ",Address,":",Port," не удалось, ошибка ",GetLastError());
        }
      //--- закроем сокет после использования
      SocketClose(socket);
     }
   else
      Print("Не удалось создать сокет, ошибка ",GetLastError());
  }
//+------------------------------------------------------------------+

На своем локальном айпи создаю сокет. При работе этого примера дает ошибку 400. Что здесь не так ?

 
Простите что встреваю не отвечая на вопрос, у не могу пока такое сложное решать. Тоже интересуюсь данной темой, мне непонятно, пароль для подключения какой то есть? Где он? Это уже не первый код, где не вижу пароля.
 
Можно через Tomcat организовать общение между терминалами. Там же и запросы в интернет можно сделать. Только это нужно на джаве реализовать (обработку на стороне Tomcat)
 

Такую связь можно реализовать на многих языках )

Тут дело такое что Socket уже поддерживается самим MT5, зачем искать что-то другое если уже реализовано.


Только ничего не понятно как создать Сокет и соединение с ним... нет нигде примеров ((

 
Desapp Pr #:

Такую связь можно реализовать на многих языках )

Тут дело такое что Socket уже поддерживается самим MT5, зачем искать что-то другое если уже реализовано.


Только ничего не понятно как создать Сокет и соединение с ним... нет нигде примеров ((

Немого не в тему.
Делал через сокеты передачу файлов по FTP. 
Примеры работы с сокетом во вложении.

Файлы:
 
Вам сокет или вебсокет? В мт нет вебсокетов