//类定义
TLogClientSocket = Class( TClientSocket )
private
DaysInter : integer;
function GetLogDate: string;
procedure ConnectServer;
//下面定义一个过程用来替代OnRead事件
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override; end;constructor TLogClientSocket.Create;
begin
inherited Create(nil);
//注意,关键是下句,我把OnRead方法赋给ClientOnRead
//以方便调用
OnRead := ClientOnRead;
end;
//下面这个死活不执行,巨郁闷,并且我可以保证肯定有包发过来
procedure TLogClientSocket.ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
var sMsg : string;
begin
sMsg := Socket.ReceiveText; // 取得服务器返回信息
showmessage(sMsg );
end;//窗体启动时创建对象
procedure TFrmMain.FormCreate(Sender: TObject);
var LogClientSocket : TLogClientSocket;
begin
LogClientSocket := TLogClientSocket.Create;
with LogClientSocket do
try
ConnectServer;
if DaysInter > 3 then
Application.Terminate;
finally
Destroy;
end;
end;//痴情帅哥冒雪求答~~~~~~~~~~~~
TLogClientSocket = Class( TClientSocket )
private
DaysInter : integer;
function GetLogDate: string;
procedure ConnectServer;
//下面定义一个过程用来替代OnRead事件
procedure ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
public
constructor Create;
destructor Destroy; override; end;constructor TLogClientSocket.Create;
begin
inherited Create(nil);
//注意,关键是下句,我把OnRead方法赋给ClientOnRead
//以方便调用
OnRead := ClientOnRead;
end;
//下面这个死活不执行,巨郁闷,并且我可以保证肯定有包发过来
procedure TLogClientSocket.ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
var sMsg : string;
begin
sMsg := Socket.ReceiveText; // 取得服务器返回信息
showmessage(sMsg );
end;//窗体启动时创建对象
procedure TFrmMain.FormCreate(Sender: TObject);
var LogClientSocket : TLogClientSocket;
begin
LogClientSocket := TLogClientSocket.Create;
with LogClientSocket do
try
ConnectServer;
if DaysInter > 3 then
Application.Terminate;
finally
Destroy;
end;
end;//痴情帅哥冒雪求答~~~~~~~~~~~~
大哥们救命啊!!!
Socket: TCustomWinSocket);
var
SocketStream: TWinSocketStream;
begin
SocketStream := TWinSocketStream.Create(Socket);
SocketStream.ReadBuffer ......end;
并且我试验过,如果我不封装成类,用控件CLientSocket接收,在OnRead里是可以收到的。
为什么不用控件直接用类在ClientOnRead里收不到呢?
begin
inherited Create(nil); ClientType := ctNonBlocking;//注意,关键是下句,我把OnRead方法赋给ClientOnRead
//以方便调用
OnRead := ClientOnRead;
end;然后你再用你的ONread看看能不能收到?
注意是用ClientOnRead函数来接收而不是OnRead
不可以,现在的问题是程序根本就没进入ClientOnRead函数
我在里面设置断点了,发现ClientOnRead函数根本没执行!
procedure TFormDemo.FormCreate(Sender: TObject);
var
LogClientSocket : TLogClientSocket;
begin
inherited;
LogClientSocket := TLogClientSocket.Create;
with LogClientSocket do
try
ConnectServer;
if DaysInter > 3 then
Application.Terminate;
finally
//Free;
end;
end;procedure TFormDemo.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('thunderbird521 (东方火鸟)');
end;
Socket: TCustomWinSocket);
var
sMsg: string;
begin
sMsg := Socket.ReceiveText;
ShowMessage(sMsg);
end;procedure TLogClientSocket.ConnectServer;
begin
Address := '127.0.0.1';
Port := 5566;
Active := True;
end;constructor TLogClientSocket.Create;
begin
inherited Create(nil);
OnRead := ClientOnRead;
end;function TLogClientSocket.GetLogDate: string;
begin
//
end;