Avatar billede cms Nybegynder
07. marts 2002 - 12:08 Der er 15 kommentarer og
3 løsninger

Søges: nonblocking asyncron forbindelse

Område: Delphi-komponent
Søges: nonblocking asyncron forbindelse
Haves: Indy 9 - blocking syncron forbindelse
Scenarie:
To computere A og B.
B forbinder til A. B er en client, A er en server.
B kan nu sende en meddelelse til A, eller A til B. B kan sende to i træk til A, og omvendt. De skal altså ikke skiftes til at sende. Altså skal de begge fungere som en slags klienter, men jeg vil kun have én forbindelse!
Hverken A eller B må hænge (okay, jeg kan jo lave en thread, hvis det er nødvendigt...)

Kan dette lade sig gøre? Evt. også med indy som jeg jo kender?
Avatar billede martinlind Nybegynder
07. marts 2002 - 12:11 #1
Kan du ikke bruge TClientSocket / TServerSocket
Avatar billede Marting Forsker
07. marts 2002 - 12:20 #2
Hej Cms

hvad med det her er det noget??

procedure TForm1.Button1Click(sender:TObject);
begin
memo1.lines.savetofile('\\ComputerNavn\c\Message.txt');
end;

Server-programmet, som modtager meddelelsen, kan laves således:

procedure TForm1.Button1Click(sender:TObject);
begin
memo1.lines.loadfromfile("C:\Message.txt');
end;

Martin
Avatar billede borrisholt Novice
07. marts 2002 - 12:40 #3
I INdy 9 Bestemmer du jo netop SELV hvorlænge den må blocke !

Jens B
Avatar billede cms Nybegynder
07. marts 2002 - 12:40 #4
TClientSocket og TServerSocket har jeg ikke så gode erfaringer med.
Der går kuk idet hvis man forsøger at overføre store datamængder (hvilket jeg også har brug for...)
Jeg har ikke adgang til delte mapper på drevet.
Avatar billede cms Nybegynder
07. marts 2002 - 12:53 #5
Jeg forstår ikke det du siger Jens... Problemet med Indy er som jeg ser det, at man skal skrive fx Read* for at vente på en datapakke, men hvis man nu selv vil sende noget før Read har returneret kan det ikke lade sig gøre...
Avatar billede cms Nybegynder
07. marts 2002 - 12:55 #6
Det skulle helst være helt messagestyret, så jeg bare fik en event i min vcl thread når der kom en besked fra den anden. Server og klient skulle på overfladen opføre sig helt ens...
Avatar billede borrisholt Novice
07. marts 2002 - 13:14 #7
Lad mig lige slå HELT FAST hvis B ikke ER forbundet til A kan A ikke skrive til B !!!!

Har du tænkt på ar bruge UDP ? Eller FTP ?

Jens B
Avatar billede cms Nybegynder
07. marts 2002 - 13:33 #8
*g*
Ja jeg har overvejet det, men fatter ikke ideen med UDP. Hvad er det den kan som TCP ikke kan?
Avatar billede martinlind Nybegynder
07. marts 2002 - 13:37 #9
Sende ud i den blå luft uden fejl, der er ikke noget check på om modtageren virkelig modtager noget
Avatar billede laffe Nybegynder
07. marts 2002 - 16:19 #10
Brug TClientSocket og TServerSocket Det er meget nemt, og de kan også håndtere store datamængder. Dataerne vil blive sendt i mindre pakker, som du så bare skal samle sammen til en igen.
Hverken A eller B vil hænge da begge komponenter kører i deres egen tråd.
Avatar billede cms Nybegynder
08. marts 2002 - 00:25 #11
okay. Sidder og leger med TClient/ServerSocket, og det er jo i virkeligheden det jeg har brug for. Men jeg gider ikke rigtig bruge 1 uge på at skrive noget kode der kan stykke de bittesmå dele information sammen igen. Selvom jeg blot sender en integer og en streng får serveren to OnClientRead events. Kan man ikke begrænse dette?
Ellers - kender I nogle gode steder hvor jeg kan downloade komponenter bygget på TClient/ServerSocket eller blot visende eksempler på deres brug?
NB: Pointene er sat op.
Avatar billede stoney Nybegynder
08. marts 2002 - 00:33 #12
He er eks. hvis det er filoverførsel du er interesseret i.

kig under downloads

http://users.pandora.be/dirk.claessens2/

Stoney
Avatar billede borrisholt Novice
08. marts 2002 - 08:38 #13
hvad emd mailslots kan de ikke bruges ?

jens B
Avatar billede laffe Nybegynder
08. marts 2002 - 08:56 #14
Hvis du sender en pakke på f.eks 128 bytes, så vil du også modtage disse data i en hel pakke. Dine data bliver først "splittet ad" når du sender større mængder data ad gangen f.eks 4kb,8kb eller 1mb alt afhængig af hvad dit netkort er sat op til at sende på en gang.

Jeg har bruft Socket komponenterne i stor stil i et message system, med over 200 clienter. Det virkede upåklageligt.

Jeg kan ikke helt forstå, at du få to OnReadEvents, ved at sende en pakke som kun fylder 4 bytes ?. Jeg har nogle gange oplevet, at der genereres en OnReadEvent ved opstart, men ellers ikke.

Hvis du sender f.eks 4 bytes men i OnReadEvent kun læser 2 bytes ( ReceiveBuf(Pakke,2) ), så vil der blive genereret en event mere, da der jo mere data til dig.
Avatar billede cms Nybegynder
08. marts 2002 - 11:47 #15
Det ser godt ud allesammen :)
Nu sidder jeg så og tænker på... hvilken serverkomponent er bedst til at handle mange client-connections samtidigt? Jeg prøvede med ServerSocket/ClientSocket. Klienterne brød ned, når der var mere end 10 samtidige connections hos serveren og der var ingen mulighed for at trappe de exceptions der opstod :/ Det skal siges at jeg satte dem til at connecte stort set samtidigt, men alligevel...
Avatar billede laffe Nybegynder
08. marts 2002 - 11:56 #16
Det skal virke !! Du må have gjort noget galt.
Avatar billede cms Nybegynder
27. marts 2002 - 16:30 #17
oki. jeg takker for hjælpen :) laffe smider du ikke lige et svar?
Avatar billede cms Nybegynder
19. juli 2002 - 15:17 #18
På tide at lukke. Tak for hjælpen gutter :)
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