![]() |
Client ausfindig machen
Hallo. Ich hätte da eine Frage zu den Sockets.
Und zwar habe ich einen server und mehrere Clienten verbinden. Die Clienten senden Text. Nun möchte ich herausfinden von welchem der Text kam. Ungefähr so.
Delphi-Quellcode:
Was muss ich für das ? einsetzen??
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); begin ShowMessage('Nachricht von Client Nr.' + IntToStr(?) + ' empfangen'); end; Danke schonmal. |
Re: Client ausfindig machen
Zitat:
Delphi-Quellcode:
Möglich wäre auch die Adresse/Hostname
Socket.SocketHandle
Delphi-Quellcode:
Ich hoffe du kannst damit was anfangen.
Socket.RemoteAddress
Socket.RemoteHost |
Re: Client ausfindig machen
Nein.
Wenn 2 Clienten verbunden sind muss die zahl für das ? entweder 0 oder 1 sein. |
Re: Client ausfindig machen
Erstelle eine Liste / ein Array, indem du einer Adresse eine ID (0,1,2,...) zuweist. Benutz dann die Adresse, um die ID herauszufinden.
|
Re: Client ausfindig machen
Öhm, das versteh ich nicht wirklich.
Dadurch weiß ich doch auch nicht welcher Client gesendet hat. |
Re: Client ausfindig machen
Zitat:
Wenn Du eine Zuordnung von IP+Port zu einer eindeutigen ID hast kannst Du soch sagen, daß Der Client, der auf Port xyz von IP abc sendet die ID 123 hat. Bis neulich ... |
Re: Client ausfindig machen
Könntest du da mal n konkretes Beispiel schreiben?
|
Re: Client ausfindig machen
Delphi-Quellcode:
type TIPID = record
adress: string; //oder integer ID: integer; end; type TIPIDArray = array of TIPID |
Re: Client ausfindig machen
Öhm und dann?
Wie siehts dann mit OnClientConnect und OnClientRead aus ? |
Re: Client ausfindig machen
Erstelle in der Klasse TForm1 eine Variable vom Typ TIPIDArray, und greife dann darauf zu. In OnClientConnect machst du (evtl.) das Array mit SetLength größer und hängst die IP mit der ID an, in OnClientRead durchsuchst du dann einfach das Array.
|
Re: Client ausfindig machen
Sorry ich peil das nicht :wall: :wall: :wall: :wall:
|
Re: Client ausfindig machen
Hallo Gerrit,
also, jedes Socket das sich zu deinem Server verbindet hat ein eindeutiges Handle. Sobald sich jemand verbindet, fuegst du dieses Handle einer Liste hinzu. Im OnClientRead verwendest du dann Socket.SocketHandle um das Handle des sendenden Sockets herauszufinden, und gehst durch das Array um die interne ID des Sockets zu finden. Diese zeigst du dann an. Greetz alcaeus |
Re: Client ausfindig machen
Delphi-Quellcode:
Mag dumm aussehen aber mal schaun was ihr so sagt ... unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp; type TForm1 = class(TForm) ServerSocket1: TServerSocket; procedure ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Clienthwnd: Array[0..1] of Hwnd; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ServerSocket1.Active := True; end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin If Socket.Handle = ClientHWND[0] then ServerSocket1.Socket.Connections[0].SendText('hallo') else ServerSocket1.Socket.Connections[1].SendText('hallo'); end; procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin If ClientHWND[0] <> 0 then begin ClientHWND[0] := Socket.Handle; exit; end else if ClientHWND[1] <> 0 then Socket.Disconnect(2) else ClientHWND[1] := Socket.Handle; end; procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin If socket.Handle = ClientHWND[0] then begin ClientHWND[0] := ClientHWND[1]; ClientHWND[1] := 0; end else if socket.Handle = ClientHWND[1] then ClientHWND[1] := 0; end; end. Es dürfen maximal 2 Clienten verbinden. Zitat:
|
Re: Client ausfindig machen
Die Position von Clienthwnd ist evtl. nicht optimal (globale Variablen sind umstritten, Clienthwnd könnte genauso gut in TForm1 stehen)
Zitat:
|
Re: Client ausfindig machen
Und deswegen schreibst du mir eine PM ob ich denn wirklich so blöd bin und das nicht verstehe?
|
Re: Client ausfindig machen
Phistev, Gerrit,
bitte klaert eure kleinen Differenzen nicht hier, sondern per PN oder sonstwo. Wenn jemand etwas nicht kann, ist dies keinen Grund, ihn als "bloed" darzustellen. Genau deshalb gibt es das Forum. Gerrit, such mal in der DP nach ![]() Falls du nur 2 Clients zulassen willst, kannst du auch mit ![]() Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz