Indy multi port tcp не получает данные в определенный порт - PullRequest
1 голос
/ 25 мая 2019

У меня есть TCP-сервер для чтения данных из некоторых разных портов.

Порт 55000 подключен к аппаратному устройству, но другие порты будут получать данные от программных клиентов.

Мой кодпоказано ниже.

Все порты, кроме 55000, работают хорошо, но я не получаю никаких данных на 55000. Wire-Shark показывает, что все хорошо на уровне TCP, также программное обеспечение Math-Lab может получать данныено Инди не может.

Как мне найти и исправить проблему?

ccsReCStatus := false;
offReCStatus := false;
case AContext.Binding.Port of
      55000: begin
              repeat
                  aByte := AContext.Connection.IOHandler.ReadByte;
                  inputOfflineStr := inputOfflineStr + chr(aByte);
                  if inputOfflineStr.Length>1000 then
                  begin
                    TThread.Synchronize(
                    nil,
                    procedure
                      begin
                          Memo14.Lines.Add( inputOfflineStr );
                          inputOfflineStr:='';
                      end);
                    end;
              until offReCStatus = true;
      end;
      35758: begin
            inputCcsStr :='';
            repeat
                  aByte := AContext.Connection.IOHandler.ReadByte;
                  if aByte=$C0 then
                  begin
                      TThread.Synchronize(
                      nil,
                      procedure
                      begin
                          memo14.Lines.Add( datetimetostr(now) + ' :' + inputCcsStr );
                          inputCcsStr:='';
                      end);
                  end
                  else
                  begin
                      inputCcsStr := inputCcsStr +  aByte.ToHexString;
                      AbLED482.Tag := DateTimeToUnix(now);
                      AbLED482.Checked := true;
                  end;
            until ccsReCStatus = true;
      end;
      2222: begin
            RStr:='';
          repeat
                aByte := AContext.Connection.IOHandler.ReadByte;
                if (aByte = $C0) and (RStr='') then
                begin
                  RStr:='';
                end
                else
                if (aByte = $C0) and (RStr<>'') then
                begin
                  TThread.Synchronize(
                  nil,
                  procedure
                  begin
                       memo14.Lines.Add( RStr );
                       RStr := '';
                  end);
                end
                else
                begin
                    RStr:=RStr+chr(aByte);
                end;
          until ccsReCStatus = true;
        end;
end;
...