hi TrippleDoubleU,
- der Port ist einmalig "je Server", d.h. alle Clienten senden ihre Anfragen (ConnectRequest) auf demselben Port und das ist der, den du im code vorgegeben hast. der Server handelt dann mit jedem Client, dessen Anfrage er annimmt, einen anderen (eindeutigen) Port aus. z.b. stellst du Port 2048 für den Server und alle Clienten ein, und die tatsächliche Verbindung läuft dann über port 2090, 2091 und 2092 (bei 3 Clienten), während der Server weiterhin auf Port 2048 auf weitere Anfragen lauert. Diese 3 Portnummern handeln Server und Clienten ohne dein zutun aus, im Ernstfall weisst Du nicht mal, welche Ports die dann benutzen. Stell Dir vor, der Server ist ein Makler mit ´nem Handy und drei stationären Telefonen. Client 1 ruft auf dem Handy an und gibt seine Nummer (TCP/IP-Adresse) durch und legt dann auf. Der Server ruft mit dem stationären Telefon 1 den Clienten an und die beiden können schwatzen. Genauso machen es dann Client 2 und 3, wobei das Handy immer nur zur Übermittlung der Verbindungsdaten (Adresse des Clienten) dient. Du als Programmierer sagst jedem Clienten nur die Handy-Nr.; die Nummern der anderen Telefone des Maklers interessieren dich gar nicht.
-wenn ein Client Daten sendet, z.B.
clientSocket1.Socket.SendText(sSendString)
dann löst das beim Server ein Ereignis OnClientRead aus, die gesendeten Daten stehen dann in
Socket.ReceiveText und die Adresse des Senders in Socket.RemoteHost.
-Fehlermeldungen beim Verbindungsaufbau lösen ein OnError-Ereignis auf, in dem kannst du dann deine Reaktionen auf die fehlgeschlagene Verbindung reinpacken. Wenn Du die Fehlermeldungen des ClientSocket, die auf dem Bildschirm angezeigt werden, unterdrücken willst, setzt Du einfach in der OnError-Funktion den ErrorCode auf 0. In etwa so:
procedure TfrmMain.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
cbConnect.Checked:=false;
end;
Du kannst natürlich auch den Error-Code auswerten (am besten mit ´ner case-Anweisung), was die einzelnen Codes bedeuten, findest du in der Hilfe. In etwa so:
case ErrorCode of
0: blah;
1: blah;
blahblah;
5: schubbiduh;
end;
errorCode:=0;
Hoffe, das hat erstmal ein Stück weitergeholfen, wenn ich dazukomme, schick ich dir nochmal ein Beispiel per mail.
mfg Peter