动态创建多个TclientSocket时,在OnRead事件中如何处理接收到的数据,程序如下:    for I:= 0 to Count-1 do
    begin
       pClientSocket[i] := TClientSocket.Create(nil);
       // 关联数据
       pClientSocket[i].OnConnect := OnMySocketConnect;
       pClientSocket[i].OnConnecting := OnMySocketConnecting;
       pClientSocket[i].OnError := OnMySocketError;
       pClientSocket[i].OnRead := OnMySocketRead;
       pClientSocket[i].OnDisconnect := OnMySocketDisconnect;
       pClientSocket[i].Active := false;
       pClientSocket[i].ClientType := ctNonBlocking;
    end;    procedure OnMySocketRead(Sender: TObject; Socket: TCustomWinSocket)
    begin
      // 此处如何读取每个Tclientsocket的数据
    end;

解决方案 »

  1.   

    Socket.receivetext,直接用就是了,如果想区分到底是哪个索引,可以pClientSocket[i].tag := i
      

  2.   

    能否判断那个pClientSocket触发了OnRead事件,我用的是非阻塞模式,因为我要对每个pClientSocket的数据进行处理.
      

  3.   


      for I:= 0 to Count-1 do
      begin
        pClientSocket[i] := TClientSocket.Create(nil);
        pClientSocket[i].OnConnect := OnMySocketConnect;
        pClientSocket[i].OnConnecting := OnMySocketConnecting;
        pClientSocket[i].OnError := OnMySocketError;
        pClientSocket[i].OnRead := OnMySocketRead;
        pClientSocket[i].OnDisconnect := OnMySocketDisconnect;
        pClientSocket[i].Active := false;
        pClientSocket[i].ClientType := ctNonBlocking;
        pClientSocket[i].tag := i;
      end;  procedure OnMySocketRead(Sender: TObject; Socket: TCustomWinSocket)
      begin
        if not(Sender is TClientSocket) then exit;
        case TClientSocket(Sender).tag of
           0: ...
           1: ...
           ...
        end;
      end;