Socket Error # 10048 Address already in use

场景:怎么解决socket error #10048 address already in use的有关问题?

如何解决socket error #10048 address already in use的问题?在线等!
我做了一个模拟“多客户端--单服务器”的程序,客户端循环创建10个IdTcpClient,并指定其端口和IP地址,第一次运行时不会出错,当断开连接后也就是释放资源,重新再次创建10个idTcpClient的时候就会出错,报:socket error #10048 address already in use,也找了一些资料,但是不是太清除,部分代码如下,请各位大哥大姐们帮忙,先谢谢各位了。
客户端:
//--创建的10个TIdTcpClient,连接服务器
procedure TForm1.btn_LinkClick(Sender: TObject);
var
  i : Integer;
begin
  for i:=0 to 0 do
  begin
  try
  application.ProcessMessages;
  Stat.Panels.Items[1].Text := 'idtcpclnt'+inttostr(i)+'正在连接服务器!';//--提示信息
  idtcpclnt := TIdTCPClient.Create(nil);
  idtcpclnt.BoundIP := '192.168.0.113';//--指定客户端的Ip地址
  idtcpclnt.BoundPort := 2000+i;//--指定客户端的port号
  ReceiveThread := TReceiveThread.create(LB_Content,idtcpclnt,true);//--接收线程用于从服务器端接受数据
  ReceiveThread.localIp := '192.168.0.113';//--接收线程的标识
  ReceiveThread.localPort := 2000+i;

  idtcpclnt.Host := '127.0.0.1';//--服务器ip地址
  idtcpclnt.Port := 2003;//--服务器port
  idtcpclnt.Connect();
  fIdTcpClientList.Add(Pointer(idtcpclnt));//--fIdTcpClientList用于保存创建的IdTcpClient
  ReceiveThread.Resume;
  fReceiveThreadList.Add(ReceiveThread);//--fReceiveThreadList保存接受线程。
  Stat.Panels.Items[1].Text := 'idtcpclnt'+inttostr(i)+'连接服务器完成!';//--显示信息
  except
  Stat.Panels.Items[1].Text := 'idtcpclnt'+inttostr(i)+'连接服务器失败!';
  end;
  end;
end;

//断开连接
procedure TForm1.btn_disLinkClick(Sender: TObject);
var
  i : Integer;
begin
  for i:= 0 to fReceiveThreadList.Count-1 do
  begin
  if ((TReceiveThread(fReceiveThreadList.Items[i]))<> nil) and (TIdTCPClient(fIdTcpClientList.Items[i])).Connected then
  begin
  (TReceiveThread(fReceiveThreadList.Items[i])).Resume;
  (TReceiveThread(fReceiveThreadList.Items[i])).Terminate;
  (TIdTCPClient(fIdTcpClientList.Items[i])).Disconnect;
  (TIdTCPClient(fIdTcpClientList.Items[i])).Free;
  end;
  end;
  fReceiveThreadList.Clear;
  fIdTcpClientList.Clear;
end;
第一次连接服务器时,没问题,当断开再连接时就会报错误,请问该怎么解决?

------解决方案--------------------
Delphi(Pascal) code
idtcpclientlist:array[0..9] of TIdTcpClient;
for i:=0 to 9 do
begin
  idtcpclientlist[i]:=TIdTcpClient.Create( Owner );
  ...............
end;


for i:=9 downto 0 do
begin
  idtcpclientlist[i].disconnect;
  idtcpclientlist[i].free;
end;

------解决方案--------------------
idtcpclnt.BoundPort := 2000+i;//--指定客户端的port号
这个不指定.
------解决方案--------------------
那在你模拟完成后,释放client所占的端口资源.或者直接释放client.
------解决方案--------------------
创建的时候 for i:=0 to 9 do
释放的时候 for i:=9 downto 0 do

------解决方案--------------------
楼上正解,记住,server端被连接的时候,list add没关系,但是释放的时候,一定要从后往前来,否则list会前移