[C++ VCL Builder von Borland] SocketServer soll ClientID ausgeben

xLx

Grünschnabel
Hallo Leute,
ich bin nun dabei, erstmal Testweise ein Programm für Windows mit dem C++ Builder 6 von Borland zu machen.

Klappt auch soweit (verbindung aufnehmen und Sockets verschicken). Nun wollte ich aber, das der Client ein Socket an den Server schickt und dieser eine Antwort nur an genau diesen Clienten verschickt. Wie kann ich das bewerkstelligen.

Die ID des Clienten ist ja meines wissens nach nicht fest. Sobald dich jemand ausloggt, rutschen alle Clienten nach. Mit welchem Befehl, kann ich vom ServerSocket die Client-Adresse den Clienten angeben, welcher auf dessen Socket der Server gerade Reagiert.

SocketServer1->Sockets->Connections[x]->SendText("fdsf");

Dieses x würde ich gerne ausgeben lassen.

Danke für eure Hilfe

LG

L
 
Ein Bisschen Code wär nicht schlecht...
was machst du, wenn sich jemand ausloggt?
wie hast du es gemacht, daten von allen clients zu empfangen?
 
Hier mal mein Code:

Code:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
//EMPFANGEN DES STEAMS
TMemoryStream *Empfangen = new TMemoryStream;
{
int BufferGroesse = Socket->ReceiveLength();
BYTE *Buffer_BYTEp = new BYTE[BufferGroesse];
Socket->ReceiveBuf(Buffer_BYTEp, BufferGroesse);
Empfangen->WriteBuffer(Buffer_BYTEp, BufferGroesse);
Empfangen->SaveToFile("Empfangen.tmp");
Daten->LoadFromFile("Empfangen.tmp");
DeleteFile("Empfangen.tmp");
delete [] Buffer_BYTEp;
delete Empfangen;
}
//ENDE DERS EMPFANGENS

//BEFEHLE

if (Daten->Strings[0] == "Sprachenliste")  //Vorhandene Sprachen auswaehlen/senden
              {
                TMemoryStream *Connect = new TMemoryStream;
                //ERSTELLE DATEN
                Daten->Add("sys01");
                Daten->SaveToFile("Sending.tmp");
                Daten->Clear();
                Connect->LoadFromFile("Sending.tmp");
                DeleteFile ("Sending.tmp");
                ServerSocket1->Socket->Connections[Client]->SendStream(Connect);
                //ENDE
              }
}

So werden die Streams empfangen. Nun möchte ich dieser stelle:

Code:
ServerSocket1->Socket->Connections[Client]->SendStream(Connect);
Eine Antwort genau an den Clienten Schicken, welcher diese Funktion ausgelöst hat. Weis allerding nicht wie. HILLFFFE ;)

Mir hat sich noch eine Frage aufgetahn. Wie kann ich Daten einer StringListe in einen Socket überspielen und Verschicken und wieder in eine StringListe speichern (siehe CODE) OHNE das ich sie vorher in eine Temporähre Datei speichern muss.
Ich habe es mit dem Befehl StringList->SaveToStream versucht, allerdings wurde dann mein Stream (vermutlich weil er leer war) überhaupt nicht gesendet.

Bitte um schnelle Hilfe!!
DANKE

LG

L

PS: An alle habe ich es geschickt, indem ich mit einer Schleife die Daten jeweils einzeln bis zu einem bestimmten wert MAX-Online-Clienten verschickt habe:

also:
Code:
for (int i=0; i<=MaxClient;i++)
{
ServerSocket1->Socket->Connections[i]->SendStream(Connect);
}
 
Zuletzt bearbeitet:
Danke, dass du es versucht hast.

Hat sonst keiner eine IDee, der sich mit dem Builder auskennt? Braechte dringen eine Loesung.
 
Zurück