Avatar billede debushatta Nybegynder
11. juni 2003 - 18:49 Der er 8 kommentarer og
1 løsning

Hvordan bruges TServerSocket? Pleas. Vil blive meget glad.

Jeg skal lave en server, hvor nogle klienter, skal kunne logge sig på.
jeg har så brug for nogle eksempler eller lignene på:

Hvordan man sender beskeder fra serveren til een bestent klient?

I serverProgrammet, mangler jeg i bund og grund nogle informationer om klienterne, så jeg lige præcist ved hvilken klient der sender til!!
Avatar billede abpdk Nybegynder
11. juni 2003 - 18:52 #1
Har du kikket på Delphi's egne eksempler? Der burde gerne være et par med socket. Noget chat-halløj eller sådan noget.
Avatar billede debushatta Nybegynder
11. juni 2003 - 18:54 #2
nej der er ikke lige det jeg skal bruge
Avatar billede razersedge Nybegynder
11. juni 2003 - 19:47 #3
Når brugeren kobler på, gemmer du info om ham, (hostmask, remoteaddress,remoteport, osv) i en record, når du så skal sende til en enkelt løber du alle forbundne klienter igennem og tjekker op på de data du gemt, der hvor de alle passer har du din specifikke klient.
Avatar billede razersedge Nybegynder
15. juni 2003 - 14:51 #4
Var det en god nok løsning?
Avatar billede debushatta Nybegynder
16. juni 2003 - 14:08 #5
kan du give et lille eksempel? evt bare lidt kode
Avatar billede razersedge Nybegynder
16. juni 2003 - 15:16 #6
Ok, dette er dog noget kode fra et af mine projekter.

Du har en record til at gemme info om hver bruger:

type
    TUsers = record
        Name        : string;
        RemoteAddr  : string;
        RemotePort  : Integer;
        PingValue  : string;
        PingNb      : Integer;
        LoggedIn    : Integer;
    end;
    PUsers = ^TUsers;  //pointer til denne record type

En liste til at holde pointere til disse records:

var
  userList : TList;


    UserList := TList.Create();  //I form create et sted...

jeg har også en procedure som bruges til at tilføje nye klienter:

Procedure AddUser(Name, RemoteAddr : String; RemotePort : Integer);
var
  User : PUsers;
begin
  New(User);  //Pointer til ny record

  User^.Name := Name;
  User^.RemoteAddr := RemoteAddr;
  User^.RemotePort := RemotePort;
  User^.PingValue := '';
  User^.PingNb := 0;

  UserList.Add(User); //tilføjer pointer til listen, listen indeholder nu også denne bruger
end;

Når klienten så er connected, og har sendt en streng eller lign for at logge ind (i mit tilfælde) kan du så add'e ham, i OnCLientRead:

    RemoteAddr := Socket.RemoteAddress;
    RemotePort := Socket.RemotePort;

    //... tjek om han skal have lov at logge ind, eller noget
    //.. finde det navn han sender, evt tjekke om det allerede er i brug
    //.. tilføj bruger til listen

    AddUser(BrugersNavnHer, RemoteAddr, RemotePort);

-----

når brugeren så senere skriver, kan du løbe listen igennem og tjekke efter hvor den brugers RemoteAddr og RemotePort matcher, og så pille navnet ud.

når du skal sende til brugeren og kun har hans navn, løber du listen igennem, finder RemoteAddr og RemotePort, herefter løber du alle connections igennem, for at finde der hvor RemoteAddr og RemotePort matcher en connection, når de gør det sender du.


Var det eksempel nok?
Avatar billede razersedge Nybegynder
16. juni 2003 - 15:17 #7
.. husk UserList skal være deklareret globalt.
Avatar billede debushatta Nybegynder
16. juni 2003 - 16:45 #8
ok kigger lige på det så skal du nok få dine point
Avatar billede debushatta Nybegynder
31. juli 2003 - 22:07 #9
OK MANGE TAK
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester