Klient 1 -> Server -> Klient 2

Tags:    delphi

User
Bruger #414 @ 19.03.02 13:24
Hej udviklere!

Jeg er ved at lave et chat-program (Klient 1 -> Server -> Klient 2)

Er der nogle som kan forklare mig, hvordan jeg får gjort så når Klient 1 requester for adgang til chatserver og hvis adgang godkendes så for Klient 1 en brugerliste over andre brugere og når Klient 1 sender en meddelse til Klient 2, så sendes beskeden gennem serveren og ikke direkte til Klient 2? Jeg håber at nogle kunne forstå dette :)

Hints: Jeg er godt klar over at der skal bruges (Server - Klient f.eks. Netmasters eller SimpleTCP) komponenter, problemet er bare hvordan jeg får udnyttet komponenterne bedst muligt

Jeg vil være glad hvis jeg kunne få en forklaring, kodestumper er ikke krævet, men ville være til stor hjælp

Hilsen Allan Iversen (Håber der er nogle kloge hoveder derude...)



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
:fightred:

INDY?, hvad er det?


Indy er en samling af internet componenter til delphi. De er gratis og følger forøvrigt med delphi 6 såvidt jeg husker.

Mht til chat program, så har du ikke fået forklaret 100% præcist hvad programmet skal og især hvor store antal brugere der skal benytte det.

Under alle omstændigheder vil jeg sige at du sagtens kan benytte de to socket componenter ClientSocket og ServerSocket der følger med Delphi. Jeg kan ikke lige huske fra hvad version de begyndte at følge med.

Hvis vi tager udgangspunkt i en simpel chat client hvor der er et rimelig begrænset antal brugere på som ikke findes i en database, men istedet logger på og vælger login fra gang til gang (Som f.eks irc), så ville jeg gøre følgende.

Når clienten har forbundet til serveren sender den en pakke indeholdende bruger informationer. Dette kan være f.eks brugernavn, rigtigt navn osv. Disse informationer sendes i et eller andet custom format. Du kunne f.eks vælge at sende dem i xml format for at gøre dit arbejde lettere.

Hvis det ikke skal være muligt at to personer har samme brugernavn så vil det første der skal ske være at serveren checker om der er andre med samme bruger navn.. hvis det skulle være tilfældet sendes en fejl meddelelse tilbage til clienten og forbindelsen lukkes.

Hvis brugernavnet ikke findes eller det er tilladt med flere personer med samme brugernavn opretter serveren et bruger objekt og fylder de tilsendte informationer ind samt information om socket'en så der senere kan udveksles yderligere information.

Dette objekt sættes ind i en liste over brugere og ved hvis forbindelsen til en bruger mistes fjernes det tilhørende objekt naturligvis og der sendes besked til alle andre brugere om at den pågældende bruger ikke længere er på.

Det næste der nødvendigvis må ske er at serveren først sender information ud til den nye bruger (client) om hvem der er online (Ved at gå igennem listen af brugere). Ved samme lejlighed kan der passende sendes information ud til alle andre brugere i listen om at der er kommet en ny bruger online.

Når nu en besked sendes fra en client til serveren sendes den igen som en pakke i f.eks xml format og indeholder en modtager (Som id, brugernavn, ip eller en anden identificerende information) samt selve beskeden.

Idet serveren modtager beskeden sendes denne med det samme videre til den rette modtager.

Hvis der nu havde været tale om et netværk med mange brugere i et netværk som f.eks icq hvor man har en kontakt liste over folk man kender og hvor hver bruger har sin egen id og password, så ville det nok være mere mere fornuftigt at lade clienten med et fast interval forespørge serveren om hver af personerne i kontakt listen var online. Derved skal der ikke sendes informationer til clienten om alle personer der er online.

Selve socket komponenterne er rimelig lette at benytte og der skulle være hjælp til dem i den hjælpefil der følger med Delphi.

Mvh

Kristian




Tja... Det spørgsmål er der jo nok flere forskellige svar på, men her er mit:

Serveren skal når den modtager fra Klient 1 tjekke om det er en Tekst (hvordan må du selv finde ud af), og derefter sender den videre til alle andre klient, måske med en lykke. Så skal klienterne så modtage det, og skrive det i en memo eller hvad du nu vil. Jeg vil dog også anbefale dig at bruge Indy til dette program, da der er nogle gode eksempler med, som du også kan kigge lidt på, og som nok kan give dig et indtryk af hvordan det fungere! Håber at det hjalp dig!

- Nick
- www.nizro.f2s - GamesDev
- Send me mails at cnn@pc.dk



Hej udviklere!

Jeg er ved at lave et chat-program (Klient 1 -> Server -> Klient 2)

Er der nogle som kan forklare mig, hvordan jeg får gjort så når Klient 1 requester for adgang til chatserver og hvis adgang godkendes så for Klient 1 en brugerliste over andre brugere og når Klient 1 sender en meddelse til Klient 2, så sendes beskeden gennem serveren og ikke direkte til Klient 2? Jeg håber at nogle kunne forstå dette :)

Hints: Jeg er godt klar over at der skal bruges (Server - Klient f.eks. Netmasters eller SimpleTCP) komponenter, problemet er bare hvordan jeg får udnyttet komponenterne bedst muligt

Jeg vil være glad hvis jeg kunne få en forklaring, kodestumper er ikke krævet, men ville være til stor hjælp

Hilsen Allan Iversen (Håber der er nogle kloge hoveder derude...)


En ting du skal have med er en header, det kan f.eks være en streng eller en record som du sender sammen med sin tekststreng:

Header = record
Username: string;
modtager: string;
nogetmere: string;
merendnu: integer;
end;

ex:

[noget der skiller header fra tekst] [din tekst]

det er ihvert fald en start og er nget af det man skal have styr på først...

Casper





User
Bruger #713 @ 21.03.02 21:56
:fightred:

INDY?, hvad er det?




t