服务端:
procedure TcontForm.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
 var rStr,tStr,pStr: String;
     DataThread: TClientDataThread;
begin    
  Try    
    //---创建线程
    DataThread:=TClientDataThread.Create(True);
    //---设置参数
    DataThread.TargetList:=memRecv.lines;
    rStr := ClientSocket.Receiveln;
    //---根据字符判断是控制指令、常用口令还是文字会话
    While rStr<>'' do
    Begin
      DataThread.ListBuffer.Add(rStr);
      rStr:=ClientSocket.Receiveln;
    End;
    DataThread.ListBuffer.Add('');  
    //---唤醒线程
    DataThread.Resume;
    //---给客户端返回执
    ClientSocket.Sendln('目标单位已接收。');
      
  Except End;
end;客服端,按单位顺序,根据不同IP和端口给不同目标发送消息     For k:=1 to gDeptNum do
     Begin
       contForm.TcpClient1.RemoteHost:=gDeptCom[k].Ip;//目标IP
       contForm.TcpClient1.RemotePort:=gDeptCom[k].Yd;//目标端口
       Try
       If contForm.TcpClient1.Connect then contForm.TcpClient1.Sendln(gSendMsg);
       Application.MessageBox(PChar('成功发送!'),PChar('提示'),MB_OK);
       Finally
       contForm.TcpClient1.Disconnect;
       End;
     End;//For k:=1 to gDeptNum do问题:当gDeptNum为1时没问题,但多个的时候会出错,请各位高手帮帮忙,有什么解决办法吗?或者有其他可行的控件没?请附上源码,万分谢谢!

解决方案 »

  1.   


         For k:=1 to gDeptNum do
         Begin
           //---创建动态组件
           gClientNum:=high(tcpCent)+1;
           SetLength(tcpCent,gClientNum+1);
           //---设置组件参数并执行动作
           tcpCent[gClientNum]:=TTcpClient.Create(Self);
           tcpCent[gClientNum].Name:= 'tpCnt'+IntToStr(gClientNum)  
           tcpCent.RemoteHost:=gDeptCom[k].Ip;//目标IP
           tcpCent.RemotePort:=gDeptCom[k].Yd;//目标端口
           Try
           If tcpCent.Connect then tcpCent.Sendln(gSendMsg);
           Application.MessageBox(PChar('成功发送!'),PChar('提示'),MB_OK);
           Finally
           tcpCent.Disconnect;
           tcpCent.Destroy;
           End;  
         End;//For k:=1 to gDeptNum do
      

  2.   

    上面代码放一个线程里,请问tcpCent[gClientNum]:=TTcpClient.Create(Self);这句为什么编译不过去?