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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 22:09   #1
Sanek_ntsk
Пользователь
 
Регистрация: 08.11.2007
Сообщений: 91
По умолчанию Кодировка IdTCPServer/Client

Вобщем сделал что-то вроде мини-чата. При отправке сообщение с русскими символами они отображаются вопросами(?????) как исправить?

Сервер
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, SyncObjs,
  IdContext, IdCustomTCPServer;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Label1: TLabel;
    CountEdit: TEdit;
    Label2: TLabel;
    FromEdit: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure IdTCPServer1Execute(AContext: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Section : TCriticalSection;
  Processed : Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Section := TCriticalSection.Create;
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var
  Text : String;
begin
  Text := AContext.Connection.Socket.ReadLn();
  AContext.Connection.Socket.WriteLn('Принял строку: ' + Text);
  Section.Enter;
  Inc(Processed);
  CountEdit.Text := IntToStr(Processed);
  FromEdit.Text := AContext.Connection.Socket.Binding.PeerIP;
  Section.Leave;
  AContext.Connection.Disconnect;
end;

end.
Клиент
Код:
unit MainUnitTCPClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    ServerEdit: TEdit;
    MessagesMemo: TMemo;
    MessageEdit: TEdit;
    SendButton: TButton;
    IdTCPClient1: TIdTCPClient;
    procedure SendButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SendButtonClick(Sender: TObject);
begin
  IdTCPClient1.Host := ServerEdit.Text;
  IdTCPClient1.Connect();
  IdTCPClient1.Socket.WriteLn(MessageEdit.Text);
  MessageEdit.Clear;
  MessagesMemo.Lines.Append(IdTCPClient1.Socket.ReadLn);
  IdTCPClient1.Disconnect;
end;

end.
Не мы такие, жизнь такая...
Sanek_ntsk вне форума Ответить с цитированием
Старый 24.05.2011, 08:09   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Попробуйте так принимать текст
Код:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
 Text:=AContext.Connection.IOHandler.ReadLn;
end;
SERG1980 вне форума Ответить с цитированием
Старый 24.05.2011, 15:12   #3
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
Сообщение

Та же проблема, но не помогает ни Socket.ReadLn(), IOHandler.ReadLn(). Может что то подключить и настроить к серверу или клиенту?

____

решил как

Код:
uses IDGlobal;
TCPServer
Код:
procedure TMyIdTCPServer.ServerExecute(AContext: TIdContext);
var
   ecn:TIdTextEncoding;
begin
...
    ecn:=TIdTextEncoding.Create;
    AContext.Connection.IOHandler.DefStringEncoding:=ecn.UTF8;
    AContext.Connection.IOHandler.WriteLn('Текст в утф');
...
end;
TCPClient
Код:
procedure ReadFromServer();
var
   ecn:TIdTextEncoding;
   resSt:string;
begin
...
   ecn:=TIdTextEncoding.Create;
   resSt:=IdTCPClient1.IOHandler.ReadLn(ecn.UTF8);
...
end;

Последний раз редактировалось carno; 24.05.2011 в 16:08.
carno вне форума Ответить с цитированием
Старый 24.05.2011, 16:07   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Полезная инфа надо запомнить! Хотя никогда таких проблем не было
SERG1980 вне форума Ответить с цитированием
Старый 24.05.2011, 19:17   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

http://programmersforum.ru/showthread.php?t=59035

100 раз обсуждали
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idTCPServer Anatoliy24 Работа с сетью в Delphi 7 12.02.2011 11:40
свойства idTCPServer Deman005 Работа с сетью в Delphi 8 04.05.2010 14:57
IdTCPServer Pankhammer Работа с сетью в Delphi 0 30.04.2010 00:14
IdTCPServer Exception Comer_Jus Работа с сетью в Delphi 2 25.06.2008 22:23
IdTcpClient и idTcpServer xTANATOSx Работа с сетью в Delphi 9 17.05.2008 23:11