21. december 2001 - 22:52Der er
5 kommentarer og 1 løsning
MultiThreads
Jeg har et program, som man kan connecte til - men i dette tilfælde er der MANGE der connecter, og alle sammen connections skal have en ID, så jeg kan sende data til forskellige klienter...
Hvis du feks bruger standard ServerSocket som er med Delphi, så får hver Client tildelt et nummer når de connecter til server Socketen.
Nedenstående kode sender f.eks til alle connections, så som du kan se så har alle connections deres eget uniqe ID, det er så op til dig at holde øje med hvem som er hvem, og evt tildele dem en tråd hver.
Var i:integer;
begin for I := 0 to ServerSocket.Socket.ActiveConnections - 1 do ServerSocket.Socket.Connections[I].SendText(\'Hesten er citronblå \'); end;
Når du opretter din tråd skal du så føre en kopi af ServerSocket med over, i nedenstående kan du se hvordan jeg opretter en tråd til at connecte til en serial enhed (det er ganske vist en indyclient men det kan du selv rette til.
if not IdTCPClient.Connected then begin With TLogOnController.Create do begin OnStateEvent := WriteState; OnStatusEvent := WriteStatus; OnErrorEvent := WriteError; OnControllerConnectedEvent := WriteControllerConnect; IPNo := //\'Dit IP\'; Port := //Din port; FClientSocket := IdTCPClient; WriteDelay := 0; resume; end; end else IdTCPClient.Disconnect;
var InStr : String; State : Integer; { TDataopsamling }
constructor TLogOnController.Create; begin inherited Create(true); FreeOnTerminate := false; end;
destructor TLogOnController.Destroy; begin inherited; end;
procedure TLogOnController.execute; var TmpStr : String; //i : Integer; begin inherited; FOnConnectEvent(False); FOnStateEvent(1); FOnStatusEvent(\'Trying to connect: Ip \'+IPNo+\':\'+IntToStr(Port)); FClientSocket.Host := IPNo; FClientSocket.Port := Port; FClientSocket.Connect; if not FClientSocket.Connected then begin FOnErrorEvent(\'Could not connect to: Ip \'+IPNo+\':\'+IntToStr(Port)); Exit; end; Sleep(WriteDelay); FClientSocket.Write(#27); FOnStateEvent(2); FOnStatusEvent(\'Handshaking....\'); InStr := FClientSocket.ReadLn(\'> \', -2); FOnStateEvent(3); FOnStatusEvent(\'Connected to: Ip \'+IPNo+\':\'+IntToStr(Port)); if FClientSocket.Connected then FOnConnectEvent(True) else FOnConnectEvent(False); end;
procedure TLogOnController.SetOnStateEvent(const Value: TStateEvent); begin FOnStateEvent := Value; end;
procedure TLogOnController.SetOnStatusEvent(const Value: TStatusEvent); begin FOnStatusEvent := Value; end;
procedure TLogOnController.SetOnErrorEvent(const Value: TErrorEvent); begin FOnErrorEvent := Value; end;
procedure TLogOnController.SetOnConnectEvent(const Value: TConnectEvent); begin FOnConnectEvent := Value; end;
morten_s: jeg kører lidt rundt i det endnu - kan du evt. sende et grafisk eksempel til min e-mail?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.