Entwickler-Ecke
Internet / Netzwerk - TSocket - Server
Robii - Fr 26.06.09 15:38
Titel: TSocket - Server
Hallo, ich hab folgenden Code geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TClientNameBut.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i,y: Integer; ListItem: TListItem; AllExist: Boolean; begin AllExist := False; For i:= 0 to ConnectList.Items.Count-1 do begin If ConnectList.Items[i].SubItems[1] = Socket.RemoteAddress Then begin AllExist:= True; y:= i; end Else begin AllExist:= False; end; end; If AllExist Then begin ConnectList.Items[y].SubItems[1] := 'Online'; end Else Begin ListItem := ConnectList.Items.Add; ListItem.Caption := Socket.RemoteAddress; ListItem.SubItems.Add(Socket.RemoteAddress); ListItem.SubItems.Add('Online'); End; end; |
Der Sinn des Codes ist es, zu überprüfen, wenn schon eine Verbindung vorhanden ist, keine neue in meine ConnectList zu adden, sondern den Status einfach von 'Offline' nach 'Online' zu ändern. Aber das funktioniert bei mir nicht, es wird immer eine neue Verbindung geaddet. Beim debuggen ist mir aufgefallen, das AllExist immer False bleibt, obwohl sie ja, wenn es die Verbindung schon gibt auf True ändern müsste?
Gruß.
jaenicke - Fr 26.06.09 15:53
Du setzt AllExist ja auch wieder auf False statt nur auf True. Gefunden werden kann also nur der letzte Eintrag, da sonst die folgenden den Fund wieder überschreiben...
Dann könntest du den Code auch ordentlicher formatieren, dann kann man das auch besser überblicken...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TClientNameBut.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i, y: Integer; ListItem: TListItem; AllExist: Boolean; begin AllExist := False; for i := 0 to ConnectList.Items.Count-1 do if ConnectList.Items[i].SubItems[0] = Socket.RemoteAddress then begin AllExist := True; y := i; end else AllExist := False; if AllExist then ConnectList.Items[y].SubItems[1] := 'Online' else begin ListItem := ConnectList.Items.Add; ListItem.Caption := Socket.RemoteAddress; ListItem.SubItems.Add(Socket.RemoteAddress); ListItem.SubItems.Add('Online'); end; end; |
Und dann ist da die Frage wofür du AllExist eigentlich brauchst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TClientNameBut.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); var i, FoundItem: Integer; ListItem: TListItem; begin FoundItem := -1; for i := 0 to ConnectList.Items.Count-1 do if ConnectList.Items[i].SubItems[0] = Socket.RemoteAddress then begin FoundItem := i; Break; end; if FoundItem >= 0 then ConnectList.Items[FoundItem].SubItems[1] := 'Online' else begin ListItem := ConnectList.Items.Add; ListItem.Caption := Socket.RemoteAddress; ListItem.SubItems.Add(Socket.RemoteAddress); ListItem.SubItems.Add('Online'); end; end; |
// EDIT:
Und dann fällt mir gerade auf...
Socket.RemoteAdress schreibst du in Caption und SubItems[0] und suchst es in Subitems[1]. Da steht aber Online drin... ;-)
(entsprechend korrigiert, siehe highlight)
Robii - Fr 26.06.09 16:05
Besten Dank für die Hilfe habs verstanden & klappt jetzt.
Gruiß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!