Не работает подключение удалённому компьютеру через именованные каналы

 

Локально всё соединяется. 127.0.0.1 тоже работает.

int OnInit()
  {
   EventSetTimer(5);
   h_file=FileOpen("\\\\localhost\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN);//192.168.31.101//WIN-CRH8IT6KQBK
   while(!IsStopped() && (h_file==INVALID_HANDLE))
     {
      Print(cLng::CodeDescription(GetLastError()));
      Sleep(1000);
     }
   if(h_file==INVALID_HANDLE)
      return INIT_FAILED;
   return(INIT_SUCCEEDED);
  }
....

Это логи работы: клиент запрашивает посчитать сумму чисел, сервер отвечает

2022.05.24 20:12:36.180 Pipe_client (EURUSD,M1) C_write: 31286+11000
2022.05.24 20:12:37.038 Pipe_server (EURUSD,M1) S_read: 31286+11000
2022.05.24 20:12:37.038 Pipe_server (EURUSD,M1) S_write: 42286
2022.05.24 20:12:41.198 Pipe_client (EURUSD,M1) C_read: 42286
2022.05.24 20:12:41.198 Pipe_client (EURUSD,M1) C_write: 24582+23116
2022.05.24 20:12:42.045 Pipe_server (EURUSD,M1) S_read: 24582+23116
2022.05.24 20:12:42.045 Pipe_server (EURUSD,M1) S_write: 47698

Результат при подключении к другому компьютеру в локальной сети:

2022.05.24 20:17:20.446 Pipe_client (EURUSD,M1) Системная функция не разрешена для вызова
2022.05.24 20:17:21.448 Pipe_client (EURUSD,M1) Системная функция не разрешена для вызова
2022.05.24 20:17:22.467 Pipe_client (EURUSD,M1) Системная функция не разрешена для вызова

Расшифровка ошибки отсюда:

case ERR_FUNCTION_NOT_ALLOWED:
         return("Системная функция не разрешена для вызова");

Код у клиента:

...
h_file=FileOpen("\\\\


192.168.31.101\\pipe\\MQL5.Pipe.Server",FILE_READ|FILE_WRITE|FILE_BIN);
...

Служба "Сервер" на удалённой машине работает.

Создание сервера такое:

   hPipe=CreateNamedPipeW(
            name,
            PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED|WRITE_OWNER,
            PIPE_TYPE_BYTE|PIPE_READMODE_BYTE|PIPE_NOWAIT,
            PIPE_UNLIMITED_INSTANCES,
            1024,
            1024,
            0,
            NULL
         );
 
Помогаем :)
 

попробуйте ping

попробуйте увидеть и зайти в сети на комп без пароля

попробуйте отключив все: антивирусы, брандмауэр

 
Renat Akhtyamov #:
попробуйте отключив все: антивирусы, брандмауэр

Отключено

 
Aliaksandr Hryshyn #:

Отключено

не уверен, но возможно что на удаленном компе нужно открыть порт и заходить через него, например:


192.168.31.101:8080
 
Так код ошибки не такой должен быть
 

Гугл выдал:

Named Pipes port
Named Pipes uses ports 137, 138, 139, and 445.5 июл. 2004 г.

В процессе "System" все порты открыты

 
Придётся WinAPI использовать, не хотелось бы
 
Aliaksandr Hryshyn #:

Гугл выдал:

Named Pipes port
Named Pipes uses ports 137, 138, 139, and 445.5 июл. 2004 г.

В процессе "System" все порты открыты

а это что?

 
Renat Akhtyamov #:

а это что?

Время создания данной технологии, скорее всего
 
Aliaksandr Hryshyn:

Локально всё соединяется. 127.0.0.1 тоже работает.

Это логи работы: клиент запрашивает посчитать сумму чисел, сервер отвечает

Результат при подключении к другому компьютеру в локальной сети:

Расшифровка ошибки отсюда:

Код у клиента:

Служба "Сервер" на удалённой машине работает.

Создание сервера такое:

У меня с такими параметрами работает, правда на одном компе

//+------------------------------------------------------------------+
// Ctreate Pipe                                                      |
//+------------------------------------------------------------------+
bool CNamedPipe::Create(const string a_name="")
{
  string fpName;
  if(a_name == "") fpName = pnPrefix + Symbol();  
   else fpName = pnPrefix + a_name;
  hPipe=CreateNamedPipeW(fpName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
                                 PIPE_UNLIMITED_INSTANCES,
                                 BuffSize * sizeof(ushort), BuffSize * sizeof(ushort), 1000, NULL);
  if(hPipe == INVALID_HANDLE)
   return(false);
  else
   return(true);
}

Соединение с сервером

//+------------------------------------------------------------------+
// Open Pipe channel                                                 |
//+------------------------------------------------------------------+
bool CNamedPipe::Open(const string a_name = "")
{
  string fpName;
  if(a_name == "") fpName = pnPrefix + Symbol();  
   else fpName = pnPrefix + a_name;
  if(hPipe==INVALID_HANDLE)
  {
    if(WaitNamedPipeW(fpName, PIPE_WAIT_FOREVER) == 0)
    {
      Print("Pipe сервер " + fpName + " не доступен!");
      return(false);
    }
    hPipe = CreateFileW(fpName, int(GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, 0, NULL);
    if(hPipe == INVALID_HANDLE)
    {
      Print("Pipe сервер не создан!");
      return(false);
    }
  }
  return(true);
}
Причина обращения: