code way의 메신저 강좌를 따라하다가 잘안되어서 문의 드립니다.
소스는 아래와 같구요...
ReceiveText 함수중
IdTCPClient.ReadBuffer(Data^, DataSize);
부분에서 멈춰버리네요...
도움의 손길을 기다립니다.
----------------------
unit uClient;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
IdTCPClient1: TIdTCPClient;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure IdTCPClient1Connected(Sender: TObject);
procedure IdTCPClient1Disconnected(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ReceiveText(IdTCPClient: TIdTCPClient): string;
var
Data: Pointer;
DataSize: integer;
ssData: TStringStream;
begin
DataSize := IdTCPClient.ReadFromStack(True, 5, False);
if DataSize = 0 then
begin
Result := '';
exit;
end;
GetMem(Data, DataSize);
ssData := TStringStream.Create('');
try
IdTCPClient.ReadBuffer(Data^, DataSize);
ssData.Write(Data^, DataSize);
ssData.Position := 0;
Result := ssData.DataString;
finally
FreeMem(Data);
ssData.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IdTCPClient1.Connected then
begin
IdTCPClient1.Disconnect;
Button1.Caption := '접속';
end
else
begin
IdTCPClient1.Connect;
Button1.Caption := '해제';
end;
end;
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
Self.Caption := 'Connect';
end;
procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
Self.Caption := 'DisConnect';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not IdTCPClient1.Connected then exit;
if key = #13 then
begin
key := #0;
IdTCPClient1.WriteLn(Edit1.Text);
Edit1.Text := '';
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
MyStr: string;
begin
if Not IdTCPClient1.Connected then exit;
// Indy의 버그
{
MyStr := IdTCPClient1.ReadLn(#10, 5); // #10 = #$A
}
MyStr := ReceiveText(IdTCPClient1);
if Mystr <> '' then Memo1.Lines.Add(MyStr);
제가 약간 경험이 있는데 인디 9버전의 경우에는
9버전대의 최고버전(아마 9.18일겁니다)이 아니면
채팅 프로그램 중간에 멈춥니다.
인디를 9버전대 최고버전으로 다시 설치해 보세요.