Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2013, 11:19   #1
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
Вопрос Кодировка в telnet

Доброе время суток!
Не так давно появилась потребность написать телнет клиент. Написать написал, да вот такая проблема у меня: при выполнении батников в программе отображаются какие-то непонятные символы хотя все и проходит на ура подскажите пожалуйста где подправить надо, самому мне не разобраться...
Код:
unit TelnetUnit;

interface

uses
  Graphics,  Controls,  Forms,  Dialogs,  ComCtrls,  StdCtrls,
  windows, messages, spin,  SysUtils,  Classes, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdTelnet, ExtCtrls, IdAntiFreezeBase,
  IdAntiFreeze, XPMan, jpeg;

type
  TTelnetForm = class(TForm)
    Memo1: TRichEdit;
    sbrStatus: TStatusBar;
    IdTelnet1: TIdTelnet;
    Panel1: TPanel;
    lblServer: TLabel;
    lblPort: TLabel;
    SpnedtPort: TSpinEdit;
    ConnectButton: TButton;
    btnDisconnect: TButton;
    TerminalCB: TComboBox;
    Label1: TLabel;
    ComboBox1: TComboBox;
    XPManifest1: TXPManifest;
    Image1: TImage;
    Timer1: TTimer;
    Image2: TImage;
    procedure ConnectButtonClick(Sender: TObject);
    procedure btnDisconnectClick(Sender: TObject);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure IdTelnet1Connected(Sender: TObject);
    procedure IdTelnetDemoConnect;
    procedure IdTelnet1Status(axSender: TObject;
      const axStatus: TIdStatus; const asStatusText: String);
    procedure IdTelnet1DataAvailable(Sender: TIdTelnet;
      const Buffer: String);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure IdTelnet1TelnetCommand(Sender: TIdTelnet;
      Status: TIdTelnetCommand);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  TelnetForm: TTelnetForm;

implementation

{$R *.dfm}

procedure TTelnetForm.ConnectButtonClick(Sender: TObject);
begin
 IdTelnet1.Terminal:=TerminalCB.Text;
 IdTelnet1.Host := ComboBox1.Text; 
 IdTelnet1.port := SpnedtPort.Value;
 {begin
  try }
 IdTelnet1.Connect;
  { except
    ShowMessage('Ошибка при подключении!');
  end; }
end;


procedure TTelnetForm.btnDisconnectClick(Sender: TObject);
begin
  IdTelnet1.Disconnect;
end;

procedure TTelnetForm.Memo1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if IdTelnet1.Connected then
   begin
    IdTelnet1.SendCh(Key);
   end;
end;

procedure TTelnetForm.IdTelnet1Connected(Sender: TObject);
begin
 Memo1.Lines.Add('Клиент подключен');
 sbrStatus.Panels[0].text:=('Клиент подключен.');
 Memo1.Lines.Add('Можете выполнять команды');
 Memo1.Lines.Add('');
end;

procedure TTelnetForm.IdTelnetDemoConnect;
begin
 Memo1.Lines.Add('Подключение');
end;

procedure TTelnetForm.IdTelnet1Status(axSender: TObject;
  const axStatus: TIdStatus; const asStatusText: String);
begin
 if axStatus = hsDisconnected then
  Memo1.Lines.Add('Сессия закончена');
  sbrStatus.Panels[0].text:=('Клиент отключен.');
end;

procedure TTelnetForm.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
const
  CR = #13;
  LF = #10;
var
  Start, Stop: Integer;
begin
 Memo1.Lines.Add('');
  Start := 1;
  Stop := Pos(CR, Buffer);
  if Stop = 0 then
    Stop := Length(Buffer) + 1;
  while Start <= Length(Buffer) do
  begin
    Memo1.Lines.Strings[Memo1.Lines.Count - 1] := Memo1.Lines.Strings[Memo1.Lines.Count - 1] + Copy(Buffer, Start, Stop - Start);
    if Buffer[Stop] = CR then
    begin
      Memo1.Lines.Add('');
    end;
    Start := Stop + 1;
    if Start > Length(Buffer) then
      Break;
    if Buffer[Start] = LF then
      Start := Start + 1;
    Stop := Start;
    while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
      Stop := Stop + 1;
  end;
end;

procedure TTelnetForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
 if IdTelnet1.Connected then
  IdTelnet1.Disconnect;
end;

procedure TTelnetForm.IdTelnet1TelnetCommand(Sender: TIdTelnet;
  Status: TIdTelnetCommand);
begin
//   
end;


procedure TTelnetForm.Timer1Timer(Sender: TObject);
begin
   sbrStatus.Panels[1].text:=TimeToStr(now);
   sbrStatus.Panels[2].text:=DateToStr(now);
end;

procedure TTelnetForm.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.LoadFromFile('server.ini');
end;

procedure TTelnetForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ComboBox1.Items.SaveToFile('server.ini');
end;

end.
вид batника:

chcp 1251
@echo off
net stop lanmanserver && net start lanmanserver
PAUSE
Изображения
Тип файла: jpg кодировка.jpg (36.6 Кб, 158 просмотров)

Последний раз редактировалось demon-sheff; 31.05.2013 в 06:04.
demon-sheff вне форума Ответить с цитированием
Старый 30.05.2013, 19:56   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Для начала - добиться, чтобы в тексте программы не было "каких-то непонятных символов".
s-andriano вне форума Ответить с цитированием
Старый 31.05.2013, 06:03   #3
demon-sheff
Пользователь
 
Регистрация: 21.03.2013
Сообщений: 46
По умолчанию

Исправил, теперь все понятные символы? неужели ни кто не сталкивался?

Последний раз редактировалось demon-sheff; 31.05.2013 в 13:48.
demon-sheff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие с Telnet на C# Mixim C# (си шарп) 1 30.03.2011 11:51
Работа С Telnet. Zerone Работа с сетью в Delphi 7 09.10.2010 09:03
Работа с Telnet Zerone Общие вопросы Delphi 1 09.10.2010 06:09
telnet c++ Mu$T@nG Помощь студентам 19 12.08.2010 18:55