Chat Server

Tags:    c++

Hey, jeg har fundet et P2P chat program men jeg vil gerne lave det om så man skal logge sig på min server så derefter kan man bruge programmet og chatte med det andre der bruger mit program, altså lidt a la MSN bare meget mere simpelt.

Håber i kan hjælpe, fordi jeg aner ikke hvor jeg skal starte



At lave en chat server er bestemt ikke en lille opgave. Opgaven bliver ikke mindre af at man tager udgangspunkt i et eksisterende program.

Du kan bruge kodestumper fra det eksisterende program, men jeg vil anbefale at du laver din egen arkitektur, der passer til dine behov, da det er ret omstændigt at ændre en arkitektur i en eksisterende applikation. Herved undgår du også evt. side-effekter og arkitektur mismatch som du kunne komme ud for for eksempel i forbindelse med modstridende kvaliteter i mellem dine arkitekturændringer og den eksisterende arkitektur.

Det første du skal gøre er derfor at sætte dig hen til tegnebrættet og lave en arkitektur for din client-server applikation, som du kan tage udgangspunkt i. I forgindelse med implementationen af denne (læs: din arkitektur) kan du så bruge kodesnippets fra det p2p program du har fundet.

Hth




øv jeg troede ellers lige jeg kunne holde det småt og diskret



I gamle dage udviklede man programmer ved at bruge måneder på at skrive en fed kravspecifikation. Derpå brugte man måneder på at lave design og arkitektur. Og år på at skrive koden og teste den i henhold til kravspecifikationen.

Det havde den store ulempe at der kunne gå år fra kunden bestilte et produkt til han stod med det i hånden; for så at opdage at det kunden vil i dag er noget andet og at det der stod i kravspecifikationen kun var den halve sandhed. Og der kunne gå år fra at man havde designet systemet til man kunne finde ud af om det var praktisk gennemførligt.

Derfor er man i dag (stort set alle steder) gået over til at lave "gradvis" udvikling. Man starter med et minimalt system der netop demonstrerer et eller andet (i dit tilfælde kunne det være det p2p program du har fundet) og så bygger man små stykker funktion på af gangen og lader kunden sige god produktet undervejs.

Det har den klare fordel at man kan bevise undervejs at produktet er gennemførligt og kunden kan hele tiden følge med i at det der bliver lavet er det han ønsker. Ulempen (som i praksis er en meget lille ulempe) er at man fra tid til anden bliver nødt til at skrive dele af koden om for at kunne passe ind i et større system.

Så glem alt om arkitektur og tegnebræt. Kast dig ud i projektet ved at tilføje funktioner indtil du står med det produkt du ønsker.

Hvis du fortæller hvad det p2p chat program du har fundet kan, kan vi fortælle dig lidt om hvad de næste skridt i processen kunne være.



Så glem alt om arkitektur og tegnebræt. Kast dig ud i projektet ved at tilføje funktioner indtil du står med det produkt du ønsker.


Well...det ville være en mærkelig idé. Jeg er enig i, at vandfaldsmodellen ikke fungerer (den model hvor man først finder alle krav, derefter laver en fuld analyse, derefter fuldt design/arkitektur, derefter koder alt, derefter tester alt, derefter giver kunden det færdige produkt, derefter begynder forfra fordi det ikke var hvad kunden havde i tankerne).

Men man laver altså stadig design og arkitektur, men man deler hele udviklingen op i mange miniprojejter af få ugers varighed (mindre kan også gøre det).

Jeg har lavet chat funktionen på www.komogvind.dk og det blev delt op i en hel del små projekter.
1) Lav en "besked" klasse, som kan indeholde forskellige datatyper (jeg er ikke fan af automatisk serialisering), og som kan serialiseres til et byte array og som kan genoprettes fra et byte array.
2) Lav en "netværks forbindelses" klasse, som kan oprette en netværksforbindelse og send og modtage ovenstående klasser.
3) Lav en server klasse som kan instantiere ovenstående netværksforbindelses klasse.
4) ....osv osv....
....
875) Tilføj web interface til chat serveren
....

Hvert skridt bør gennemtænkes. Hvis man bare kaster sig ud i at kode med det samme, så går det galt, medmindre det er et projekt i "hello world" størrelsen.



Hej her er sourcen

Main:
Fold kodeboks ind/udKode 

Header:
Fold kodeboks ind/udKode 

Registry Header:
Fold kodeboks ind/udKode 


Resource:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 14.05.2008 11:59 af Bruger #10613
Robert, det er naturligvis nødvendigt at overveje arkitektur og design når man laver koder. Det jeg ville fortælle var mest at det er nyttesløst at forsøge hele applikationen fra starten.

Kasper, jeg synes at kunne genkende den kode...
Den bruger UPD som er connection-less og ikke TCP som er connection-oriented. For at lave en ordentlig chat server (med klienter) der kan håndtere flere brugere skal du bruge TCP (SOCK_STREAM i stedet for SOCK_DGRAM). Så første skridt kunne være at lave det om fra UDP til TCP.

Start med at lave en 1-1 server-client løsning med TCP.
Derpå kan du lave en 1-alle løsning.
Osv.

Det er ikke en helt simpel opgave, men dog langtfra en umulig opgave.



hehe bertel, koden er fra din egen side ;P men jeg syntes nu lige jeg ville kigge på den, og jeg er ved at miste modet for at lave programmet, fordi det lyder sindsyg avanceret, og jeg har heller ikke så meget viden, at jeg kan lave den slags plus jeg har eksamen jeg er i gang med



Det er ikke sindsygt avanceret, men hvis ikke du har arbejdet med sockets før, er det en stor mundfuld.

Start med at sætte dig grundigt ind i hvordan P2P-Chat virker og læs roberts artikler om sockets, så er du godt på vej.



Robert, det er naturligvis nødvendigt at overveje arkitektur og design når man laver koder. Det jeg ville fortælle var mest at det er nyttesløst at forsøge hele applikationen fra starten.

Så er vi helt enige :-)


Den bruger UPD som er connection-less og ikke TCP som er connection-oriented. For at lave en ordentlig chat server (med klienter) der kan håndtere flere brugere skal du bruge TCP (SOCK_STREAM i stedet for SOCK_DGRAM). Så første skridt kunne være at lave det om fra UDP til TCP.

Well...man kan nu sagtens lave chat programmer på UDP protokollen, men det bliver mere komplekst. Mange instant messenger programmer bruger UDP hele vejen igennem, mens andre bruger UDP til at indikere tilstedeværelse og TCP til chat.

Det er ikke en helt simpel opgave, men dog langtfra en umulig opgave.

Enig, og det er faktisk en god opgave til at lære netværksprogrammering (i modsætning til f.eks. netværksspil hvor hastighed har meget at sige).



jeg har kigget Robert's artikler i gennem men dog ikke specielt grunddigt, men det må jeg jo nok hellere gøre :D



t