Nej jeg mener hvad jeg skrev: en server og klient i begge ender. Man kan jo godt bruge både TIdTCPServer og TIdTCPClient i samme program. Man kunne også bruge TIdUDPClient og TIdUDPServer, afhængig af det præcise behov. Mulighederne er mange.
Hvordan jeg sender en besked er jeg helt med på. Chatten fungerer som den er nu, men jeg vil gerne have ovenstående aspekt med ind.
Altså at klienten står og "lytter" efter beskeder + at serveren kan sende en besked til en bestemt klient/ip.
Jeg ved bare ikke hvordan nogle af de 2 ovenstående ting løses rent praktisk. Findes der en "listen" kommando i tcp-komponenten eller hvordan klares det?
Kan du ikke bare lade klienten logge på serveren og så lade være med at logge af igen så vil klienten jo hele tiden kunne modtage fra serveren og omvendt.
Mit problem består i at, som chatten kører nu, så skal klienten selv "spørge" serveren om der er nye beskeder. Det vil jeg gerne have lavet om således at ligesåsnart serveren sender en besked, så kan klienten fange den. Her kommer det med at klienten hele tiden skal stå og "lytte" efter beskeder ind i billedet (og ikke som nu, hvor klienten hvert 3 sekund spørger serveren efter nye beskeder).
På serversiden vil jeg så gerne have at jeg kan sende beskeden til en specifik klient - f.eks. ved at angive ip.
Men jeg ved ikke om det ovenstående er muligt eller hvordan man i så fald gør det i Delphi 2005. Det er det jeg gerne vil have hjælp til.
Det er de ikke - med mindre der er noget jeg har misforstået. Klienten disconnecter aldrig fra serveren (med mindre brugeren aktivt gør det).
Som det er nu, så skal jeg sørge for at der er en "readln" kommando på klienten, når serveren sender data.
Så som det foregår nu, så sender klienten en "kommando" til serveren, hvorefter serveren sender beskederne retur. Serveren står nu og "hænger" indtil klienten har læst den sendte besked.
Derfor vil jeg gerne lave noget kode på klient-siden, som konstant "lytter" efter indkomne beskeder, således at jeg er fri for at sende en kommando til serveren for at bede om at få data retur.
Samtidigt vil jeg igen kunne sende data til en specifik klient, så jeg kan sende beskeder ud til lige den klient jeg vil.
Når en klient logger på gemmer jeg brugernavn, ip og id i et array. Så hvis man kan sende beskeder ud til en bestemt ip, så ville det være meget lækkert.
Som sagt: Det kan du kun gøre ved at indbygge en server (TIdTCPServer eller TIdUDPServer) i klienten der kan modtage beskederne, og indbygge en klient (TIdTCPClient eller TIdUDPClient) i serveren der kan sende til en bestemt ip.
Du skriver oprindeligt at du har TCPServer og en TCPKlient kørende så jeg går ud fra at du ved hvordan de bruges? Du bliver nødt til at forklare dit problem nærmere.
Jeg kan forstå at du bruger Indy med ikke tråde, efter min mening kan indy kun bruges hvis man putter koden ind i en tråd da indy benytter blocking socket. Hvis du i stedet bruger TServerSocket og TClientSocket som følger med Delphi (fra Delphi 7+ skal de manuelt installeres) og som benytter sig af events i stedet så kan du nøjes med en TClientSocket på klient siden og en TServerSocket på server siden og så holde forbindelsen og alligevel undgå at programmet "hænger". Indy er fint jeg bruger det selv men kun i tråde.
Jeg lavede et lille chat program i forbindelse med et andet indlæg (Clientsocket.sendHVAD), det benytter sig af TServerSocket og TClientSocket og har også en liste over hvem der er logget på. Det blev vist lidt rodet da det gik hurtig med at lave det men måske kan du få noget ud af det. 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.
Det var det vist ikke. Jeg kan finde TClientSocket og TServerSocket i hjælp-menuen, men af en eller anden grund kan jeg ikke finde den knap der skal trykkes på for at tilføje dem?
Er det forresten bedre at bruge TClientWinSocket og TServerWinSocket? Dem kan jeg også slå op i hjælp-menuen, men mangler også her den "knap" der kan tilføje dem.
Question: The TClientSocket and TServerSocket components seem to be missing from my installation of Delphi 7?
Solution: You will need to add the dclsockets package to the IDE. To do this go to Component | Install Packages | Add (/bin/dclsockets70.bpl).
Måske er det det samme i 2005
Eller se her: Les composants TClientSocket et TServerSocket ne sont plus installés par défaut avec Delphi 2005. Mais ils sont encore fournis. Il suffit d'installer le paquet /bin/dclsockets90.bpl via le menu Composants->Installer des paquets...
Så den hedder vist dclsockets90.bpl, mit fransk er ikke helt up to date
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.