为了测试服务器,我动态创建了clientsocket 1000个,我怎么1000个都响应onconnect事件,参数给怎样填写(100分)

  • 主题发起人 主题发起人 cjfandhf
  • 开始时间 开始时间
C

cjfandhf

Unregistered / Unconfirmed
GUEST, unregistred user!
为了测试服务器,我动态创建了clientsocket 1000个,我怎么1000个都响应onconnect事件,参数给怎样填写
现有一个

procedure Tfrmtcpclient.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText ('login ok');
end;
下面是1000个控件事件复制:
for ..........
clientsocket.OnConnect:=clientsocket1connect( ?????????????)
?该怎样写?


 
不应该填写任何参数,
你可以仅仅如此的写:
clientSocket.OnConnect:=clientsocket1connect;
OnConnect是一个TSocketNotifyEvent类型的值,
你只要把这个值附上值就行了。
type TSocketNotifyEvent =
procedure (Sender: TObject
Socket: TCustomWinSocket) of object;

如假包换!
 
如果我要在procedure (Sender: TObject
Socket: TCustomWinSocket ,loginname:string) of object
该怎样做?
 
可能是你理解错了我的意思了。
我重新解释一下吧。
TClientSocket.OnConnect的类型是TSocketNotifyEvent.
所以它可以像Integer一样被赋予值。
至于
type TSocketNotifyEvent =
procedure (Sender: TObject
Socket: TCustomWinSocket) of object;
的意思是:
实现TSocketNotifyEvent的时候,本身是一个procedure.
参数表是(Sender: TObject
Socket: TCustomWinSocket)
并且一定是类的成员函数。
一个例子:
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyOnConnect(Sender : TObject
Socket: TCustomWinSocket);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var sockets:array [1..1000] of TClientSocket;
i:integer;
begin
for i:=1 to 1000 do
begin
sockets:=TClientSocket.Create;
sockets.OnConnect:=MyOnConnect;
end;
end;

procedure TForm1.MyOnConnect(Sender: TObject
Socket: TCustomWinSocket);
begin
//here you can decide which socket connected by the sender param,
//and use Socket to use the connection
end;
如假包换

 
楼上的兄弟写的没错。
如假包换

 
如果没找到服务器时会出错,windows socket error: (11001),on api async lookup,如何解?我会给你分的,你也可以看一下我提出的
‘消息’那个问题,麻烦了
 
只写函数名称就可以了。
 
接受答案了.
 
后退
顶部