客户端窗体form1 的 Button1Click 动态产生 form2 ,form2每个对象窗体中有一个TIdTCPClient 对象负责SOCKET连接处理,大致代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
form:Tform2;
begin
form:=Tform2.Create(application);
form.Show;
end;procedure TForm2.Button1Click(Sender: TObject);
var
s:string;
begin
try
IdTCPClient1.Connect();
s:=IdTCPClient1.ReadLn();
while s<>'' do
begin
Memo1.Lines.Add(s);
s:=IdTCPClient1.ReadLn();
Application.ProcessMessages;
end;
finally
IdTCPClient1.Disconnect;
end;
end;
服务端中代码:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
s:string;
begin
s:=formatdatetime('yyyy-MM-dd hh:mm:ss',now);
AThread.Connection.WriteLn(s);
sleep(500);
end;
现在问题:我想要在一个client上同时开N个form2对象,每个form2对象都能同时自主接收到来自server的数据,上面的示例程序没达到我要的效果,当我第二个form2启动接收数据后第一个fomr2就停止了接收数据,我想问我需要怎么处理才能达到我要的效果,是不是服务端还要特别处理什么?
procedure TForm1.Button1Click(Sender: TObject);
var
form:Tform2;
begin
form:=Tform2.Create(application);
form.Show;
end;procedure TForm2.Button1Click(Sender: TObject);
var
s:string;
begin
try
IdTCPClient1.Connect();
s:=IdTCPClient1.ReadLn();
while s<>'' do
begin
Memo1.Lines.Add(s);
s:=IdTCPClient1.ReadLn();
Application.ProcessMessages;
end;
finally
IdTCPClient1.Disconnect;
end;
end;
服务端中代码:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
s:string;
begin
s:=formatdatetime('yyyy-MM-dd hh:mm:ss',now);
AThread.Connection.WriteLn(s);
sleep(500);
end;
现在问题:我想要在一个client上同时开N个form2对象,每个form2对象都能同时自主接收到来自server的数据,上面的示例程序没达到我要的效果,当我第二个form2启动接收数据后第一个fomr2就停止了接收数据,我想问我需要怎么处理才能达到我要的效果,是不是服务端还要特别处理什么?
服务端固定端口号,客户端动态设置端口号,,每次客户端先给服务端发个登陆信息,这样服务端就可以根据你不同的端口来区分你的客户端