Avatar billede c03 Nybegynder
05. december 2005 - 10:42 Der er 10 kommentarer og
1 løsning

Clientsocket.sendHVAD

Hej... Jeg er ved at lave et lille chat program til eget brug. Jeg har fået stablet mig noget på benene hvor jeg kan se RemoteAddress for de brugere der chatter. Men da det hurtigt bliver uoverskueligt hvis vi sidder 10 personer og benytter os af programmet, vil jeg gerne have implementeret noget brugernavn af en art som bliver tilføjet til en listbox.

Hvordan skal jeg sende den? Det indtastes i en Editbox.
Og hvordan skal jeg modtage den på server siden?
Avatar billede kroning Nybegynder
05. december 2005 - 10:56 #1
Den skal vel modtages på samme måde som en besked en bruger skriver, måske nogen med:

En besked modtages fra en bruger i dette format:
B:Hej dav, hvordan går det
Denne besked sender serveren videre til alle andre brugere

En bruger sender sit brugernavn således:
N:Peter
Nu kan man så vælge at serveren blot sender denne videre til alle brugere og så lader disse om at opbygge deres listbox eller serveren kunne sende en enkelt streng med alle brugernavne til alle brugere.

ved ikke om det var det du tænkte på?
Avatar billede c03 Nybegynder
05. december 2005 - 18:39 #2
Jeg ved ikke om du har prøvet at programmere med tcp/ip sockets før, men det fungere sådan at jeg ikke kan navn give mine tekster jeg sender...

Client siden sender sådan her:
ClientSocket1.Socket.SendText(Chatbesked);
ClientSocket1.Socket.SendText(Brugernavn);

Server siden modtager sådan her:
Chatbesked := ServerSocket1.Socket.ReceiveText;

Da jeg ikke rigtigt kan skrive ReceiveText(Chatbesked) og ReceiveText(Brugernavn) bliver det utroligt svært at separere de 2 forskellige.

Men jo, du har ret i dit forslag, men jeg skal jo associere mine brugernavne med det's RemoteAddress på en måde...
Avatar billede c03 Nybegynder
05. december 2005 - 19:10 #3
Men tak fordi du gav dig tid til at svare ! :)
Avatar billede kroning Nybegynder
05. december 2005 - 19:31 #4
Jo jeg har lavet en del programmer der bruger tcp og udp. Når en bruger logger på kan han jo sende sit brugernavn og så er det jo som du siger bare at lave en liste som linker ip og brugernavn sammen. Det jeg mente med N: og B: var at du ved at bruge denne syntax kan adskilde det du får fra en bruger så du ved om det han sender er en besked (B:) eller sit brugernavn (N:). Du kunne jo også vælge at de enkelte bruger altid sender deres brugernavn med ved hver besked f.eks.: Hans Hansen:Hej dav hvordan går det. Så ved dit program at alt før : er et brugernavn. Men der skal vel også sendes en besked til de enkelte brugere når en bruger logger af så de kan få deres listboxe opdateret.
Avatar billede c03 Nybegynder
05. december 2005 - 21:46 #5
Javel javel :)

Kan du give eksempler på de lister du siger der linker ip'en og brugernavnet sammen? og måske også et eksempel på det med syntaxen der skulle kende forskel på B: og N: ?

Så ville det bare være perfekt!

(Spørger lidt i detaljer da delphi ikke har noget I sin help manual angående dette emne)
Avatar billede kroning Nybegynder
06. december 2005 - 18:29 #6
Jeg har banket et lille chat sammen som du måske kan få nogle ideer fra. Jeg har brugt en TStringList til at indeholde brugerne i formatet IP:Port=BrugerNavn. Når en bruger logger på/af sendes hele bruger listen til de enkelte klienter.
Det er noget jeg jeg ikke har brugt lang tid på så der er sikkert fejl og der kan sikkert rydes op i det men som sagt kan du måske få nogle ideer.
Programmet er lavet i Delphi 7 og jeg har brugt TServerSocket og TClientSocket som føler med men manuelt skal installeres i Delphi 7.
For at teste på en enkelt maskine gør følgende:
Start programmet 2 eller flere gange
Indtast din lokale IP i dem alle
Indtast forskellige navne i dem alle
Tryk på knappen "Er server" på en enkelt af dem
Tryk på knappen "Er klient (log på)" på alle de andre
Og så er det bare at indtaste tekst og trykke enter i dem alle.

Kan hentes her: http://www.kroning.dk/ChatTest.zip
Avatar billede c03 Nybegynder
06. december 2005 - 23:13 #7
Lækkert du har givet dig tid til det. Men jeg kan virkelig ikke finde rundt i din kode. Det er lige før jeg bliver direkte forvirret ved at kigge på det med SplitTekst.

Du tror vel ikke du kunne pumpe den med comments. Og skær det hellere end gerne ud i pap :)

Det kunne være pragtfuldt. Men også tusind tak for eksemplet indtil videre! :)
Avatar billede kroning Nybegynder
07. december 2005 - 16:00 #8
Det vil jeg gøre (efter bedste evne :) men er på arbejde nu og til sent i aften så det bliver først i morgen engang.
Avatar billede kroning Nybegynder
08. december 2005 - 11:32 #9
Så er det gjort, spørg endelig hvis det stadig ikke er klart.
Avatar billede c03 Nybegynder
13. december 2005 - 23:53 #10
Det er super. Har fået det til at virke nu. Jeg havde min server til at svare klienten ved en OnChange på min server memo før, hvilket fik det hele til at lagge på en måde. Tusind tak for det.

Har dog stadig lige et spørgsmål. Nu kunne jeg godt tænke mig kryptering, da det hele jo sendes som ren tekst over tcp'en. Nogen forslag???

Skriv lige et svar eller noget så du kan få dine point :)

Igen, mange tak for hjælpen! :)
Avatar billede kroning Nybegynder
14. december 2005 - 00:28 #11
Der findes vist nogle komponenter man kan bruge til kryptering men det er ikke noget jeg har rodet med.
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