问个关于tcp/ip 的线程问题。ClientSocket的 我想在接受的地方也使用线程 ,但是不好使 不知道为什么 ,请大家帮忙看下,下面的代码能正常使用 ,就是接受数据的地方 我想不使用主线程
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure MySocketRead(Sender: TObject;Socket: TCustomWinSocket);
procedure MySocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; //定义线程
TclentThread = class(TThread)
protected
procedure Execute; override; end;
var
Form1: TForm1;
client:Tclientsocket;
SocketThread:TclentThread;
implementation{$R *.dfm}
procedure TclentThread.Execute;begin sleep(2000);
if not client.Active then
begin
form1.Memo1.Lines.Add('连不上');
client.Open;
end;
client.Socket.SendText('ddd');
///////////////////////
execute;
end;
procedure TForm1.MySocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
// StatusBar1.Panels[1].Text := '系统联机错误';
Socket.Close;
errorcode:=0;
end;
procedure TForm1.MySocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.memo1.Lines.Add('ffff'+socket.ReceiveText);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
client:=Tclientsocket.Create(form1);
client.Address:='127.0.0.1';
client.Port:=10040;
client.Open;
client.OnRead:=MySocketRead;
client.OnError:=MySocketError;
SocketThread := TclentThread.Create(False);
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure MySocketRead(Sender: TObject;Socket: TCustomWinSocket);
procedure MySocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; //定义线程
TclentThread = class(TThread)
protected
procedure Execute; override; end;
var
Form1: TForm1;
client:Tclientsocket;
SocketThread:TclentThread;
implementation{$R *.dfm}
procedure TclentThread.Execute;begin sleep(2000);
if not client.Active then
begin
form1.Memo1.Lines.Add('连不上');
client.Open;
end;
client.Socket.SendText('ddd');
///////////////////////
execute;
end;
procedure TForm1.MySocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
// StatusBar1.Panels[1].Text := '系统联机错误';
Socket.Close;
errorcode:=0;
end;
procedure TForm1.MySocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.memo1.Lines.Add('ffff'+socket.ReceiveText);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
client:=Tclientsocket.Create(form1);
client.Address:='127.0.0.1';
client.Port:=10040;
client.Open;
client.OnRead:=MySocketRead;
client.OnError:=MySocketError;
SocketThread := TclentThread.Create(False);
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货