Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

cha izmedju dva racunara u mrezi

[es] :: C/C++ programiranje :: cha izmedju dva racunara u mrezi

Strane: 1 2

[ Pregleda: 6523 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 04:28 - pre 169 meseci
Evo kako bi radio Indy server na koji bi bili ulogovani klijenti sve vreme četovanja. Neću staviti kod nego izvršne fajlove za one koji bi da probaju kako radi. Staviću i slikicu da može samo da se pogleda.

Umesto koda evo hint šta treba tražiti u kodu za server (za komunikaciju sa ulogovanim klijentima):

TList *Lista = IdTCPServer1->Contexts->LockList();

Prikačeni fajlovi
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 07:54 - pre 169 meseci
Ključni dio koda za listanje prijavljenih IP adresa na serveru bi bio ovo:

Code:
TList *list = S1->Contexts->LockList();
ListBox1->Items->Clear();
for (int i = 0; i < list->Count; i++) {
    TIdServerContext *peer = (TIdServerContext*) list->Items[i];
    ListBox1->Items->Add(peer->Connection->Socket->Binding->PeerIP);
}
S1->Contexts->UnlockList();


Ovo podrazumijeva da je klijent konstantno spojen na server. Sad preko ovoga se mogu dalje slati poruke.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 11:04 - pre 169 meseci
Citat:
itf: Ključni dio koda za listanje prijavljenih IP adresa na serveru bi bio ovo:

Code:
TList *list = S1->Contexts->LockList();
ListBox1->Items->Clear();
for (int i = 0; i < list->Count; i++) {
TIdServerContext *peer = (TIdServerContext*) list->Items[i];
ListBox1->Items->Add(peer->Connection->Socket->Binding->PeerIP);
}
S1->Contexts->UnlockList();


Ovo podrazumijeva da je klijent konstantno spojen na server. Sad preko ovoga se mogu dalje slati poruke.


Da se koriste IP adrese za slanje poruka klijentima?

Nema potrebe. Pošto su klijenti već konektovani može direktno njima, umesto ...->Binding... ovako:

Code:

        peer->Connection->Socket->Write(Poruka.Length());
        peer->Connection->Socket->Write(Poruka);


Tako server program šalje poruke klijentima u primeru koji sam poslao. Klijen programi koje sam posao nemaju uopšte tidtcpserver komponentu (ima samo tidtcpclient), a server program nema tidtcpclient nego samo tidtcpserver.


 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 11:26 - pre 169 meseci
U mom primjeru koda ne koriste se IP adrese za slanje poruka već samo da se izlistaju aktivni klijenti u listboxu. A dalje za sve se koristi pokazivač peer.

Citat:
tkaranovic: ...Klijen programi koje sam posao nemaju uopšte tidtcpserver komponentu (ima samo tidtcpclient), a server program nema tidtcpclient nego samo tidtcpserver.

Serveru nije potrebna klijent komponenta, no ne razumijem na koji način klijent aplikaciji ne treba server komponenta. Koliko znam, da bi indy tcp klijent mogao čitati nešto mora biti u stanju čekanja, što znači da klijent kada očekuje odgovor (poruku) je zablokiran sve dok ju ne dobije ili dok se ne dogodi timeout, pa tako nije moguće ništa s njim raditi (niti slati druge poruke) dok mu ne stigne odgovor (poruka) od servera? Upravo zbog toga bi se tu trebala nalazi server komponenta koja bi okidala OnExecute event i primala poruke bez obzira na to što trenutno radi klijent komponenta.

Ajd prikaži code ako već nije tajna?

EDIT: Sad sam malo bolje pogledao tvoj primjer, pa i napravio vlastiti klijent da provjerim jednu pretpostavku. Kako mi se čini tvoja klijent aplikacije pošalje poruku server i zatim odmah ode u stanje čitanja jer čeka da joj server vrati tu istu poruku. Na taj način nije potrebna server komponenta. No kvaka je u tome što ovo samo radi ako su server i klijent na istoj ip adresi. I na svojoj slici si pokazao upravo to - dva klijenta na istim ip adresama kao i server. Kada bi server bio na jednoj ip adresi a klijenti na drugim ip adresama onda bi poruku dobio samo onaj klijent koji ju je poslao, a ostali ne bi. Ona bi bila u bufferu i čekala dok ti ostali klijenti ne budu u stanju čekanja (a umjesto toga možda su u stanju slanja druge poruke). Stoga, to po meni ne ide bez server komponente, pa tako niti ovaj tvoj primjer neće raditi na različitim računalima.

No, možda sam fulao pa nisi tako rješio, ali kako mi se čini, jesi, jer bez server komponente klijenti na drugim ip adresama neće uopće znati da išta očekuju na ulazu.

[Ovu poruku je menjao itf dana 22.05.2010. u 13:09 GMT+1]
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 13:55 - pre 169 meseci
Zapravo mi se ovo čini dosta kompliciranije nego što bi trebalo biti.... Vjerovatno može jednostavnije, pa ako itko zna kako neka napravi, a evo mog rješenja:



Program + source code (BCB 2010).
http://www.box.net/shared/obnmess81h
 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi22.05.2010. u 16:13 - pre 169 meseci
hvala ti mnogo na ovome, ali gde mogu da nadjem da sginem borland c bilder 2010, ja na svim torentima i share-ovima nalazim samo sesticu
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 18:45 - pre 169 meseci
Možda više i nije bitan odgovor jer milos 2 ne može da koristi ali...


Citat:
itf
Serveru nije potrebna klijent komponenta, no ne razumijem na koji način klijent aplikaciji ne treba server komponenta. Koliko znam, da bi indy tcp klijent mogao čitati nešto mora biti u stanju čekanja, što znači da klijent kada očekuje odgovor (poruku) je zablokiran sve dok ju ne dobije ili dok se ne dogodi timeout, pa tako nije moguće ništa s njim raditi (niti slati druge poruke) dok mu ne stigne odgovor (poruka) od servera? Upravo zbog toga bi se tu trebala nalazi server komponenta koja bi okidala OnExecute event i primala poruke bez obzira na to što trenutno radi klijent komponenta.

Ajd prikaži code ako već nije tajna?


Napravio sam klijent koji ima okidajući OnExecute event i zamenio kod klijenta koji sam poslao a radi u suštini na isti način. Ipak code klijenta je u obj fajlu. :)

Citat:
itf
EDIT: Sad sam malo bolje pogledao tvoj primjer, pa i napravio vlastiti klijent da provjerim jednu pretpostavku. Kako mi se čini tvoja klijent aplikacije pošalje poruku server i zatim odmah ode u stanje čitanja jer čeka da joj server vrati tu istu poruku. Na taj način nije potrebna server komponenta. No kvaka je u tome što ovo samo radi ako su server i klijent na stoj ip adresi. I na svojoj slici si pokazao upravo to - dva klijenta na istim ip adresama kao i server. Kada bi server bio na jednoj ip adresi a klijenti na drugim ip adresama onda bi poruku dobio samo onaj klijent koji ju je poslao, a ostali ne bi. Ona bi bila u bufferu i čekala dok ti ostali klijenti ne budu u stanju čekanja (a umjesto toga možda su u stanju slanja druge poruke). Stoga, to po meni ne ide bez server komponente, pa tako niti ovaj tvoj primjer neće raditi na različitim računalima.

No, možda sam fulao pa nisi tako rješio, ali kako mi se čini, jesi, jer bez server komponente klijenti na drugim ip adresama neće uopće znati da išta očekuju na ulazu.


Evo klijent sa IdTCPClientEx koji ima OnExecute metodu koji se događa samo onda kada Sever pošalje poruku. TIdTCPClientEx je TIdTCPClient + OnExecute. (Server program je samo sa IdTCPServer.)
Prikačeni fajlovi
 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 20:20 - pre 169 meseci
ja nisam hteo da zloupotrebim tudje delo, trebalo mi je objasnjenje za skolu inace, ali ako si ti shvatio drugacije, ok. Ja sam hteo da vidim sistem kako se radi, da mogu da uradim sam svoj program, ovih dana nemam mnogo vremena, jer sutra imam 2 kontrolna i 2 odgovaranja, ali napravicu, pa cu okaciti, da se uveris da ne koristim tudje delo u potpunosti, inace, ako se malo potrudim mogu u 6-ici da napravim, jer mogu da otvorim .obj, .cpp fajl, gde mi pise ceo kod, i komponente sa kojim dogadjajima su koriscene, public, i private funkcije, ali onda bi to stvarno bila zloupotreba.

hvala ti itf sto si okacio odmah i source fajlove. cak mislim da to moze da otvori visual studio, ali ne shvatam zasto necete da mi kazete gde mogu da skinem BCB10.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 21:11 - pre 169 meseci
Citat:
milos 2: ja nisam hteo da zloupotrebim tudje delo, trebalo mi je objasnjenje za skolu inace, ali ako si ti shvatio drugacije, ok. Ja sam hteo da vidim sistem kako se radi, da mogu da uradim sam svoj program, ovih dana nemam mnogo vremena, jer sutra imam 2 kontrolna i 2 odgovaranja, ali napravicu, pa cu okaciti, da se uveris da ne koristim tudje delo u potpunosti, inace, ako se malo potrudim mogu u 6-ici da napravim, jer mogu da otvorim .obj, .cpp fajl, gde mi pise ceo kod, i komponente sa kojim dogadjajima su koriscene, public, i private funkcije, ali onda bi to stvarno bila zloupotreba.

hvala ti itf sto si okacio odmah i source fajlove. cak mislim da to moze da otvori visual studio, ali ne shvatam zasto necete da mi kazete gde mogu da skinem BCB10.

Ovo što sam prikačio sam dao na slobodnu upotrebu, tako da to možeš koristiti kako god želiš. A što se tiče BCB-a... Sumnjam da će ti itko ovdje dati link na nelegalnu verziju bilo kakvog software, a ja pošto radim u BCB-u sam sebi kupio original verziju. Općenito mislim da ti može koristiti bilo koja verzija BCB-a koja ima Indy 10 komponente, a to je svakako BCB 2009, a mislim i BCB 2007, ali za njega nisam 100% siguran.

 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 21:23 - pre 169 meseci
ja imam 6-icu, postoje indy komponente, ali neke fajlove ne mogu da otvorim, a verziju iznad 6-ice, ni trial verziju ne mogu da nadjem
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 21:30 - pre 169 meseci
Citat:
milos 2: ja imam 6-icu, postoje indy komponente, ali neke fajlove ne mogu da otvorim, a verziju iznad 6-ice, ni trial verziju ne mogu da nadjem

U 6-ici je Indy 8 kako se sjećam, a u 2006 je Indy 9. Niti jedan od njih ti ne odgovara da bi pokrenuo gornji code.
 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi23.05.2010. u 22:18 - pre 169 meseci
evo sada sam skinuo sa neta embarcadero RAD studio 2010, i tu ima kao instalacija BCB10 i delphi 10, pa sada kada instaliram cu videti da li je to to
 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi30.05.2010. u 19:53 - pre 169 meseci
mozda sada vec mnogo trazim, ali da li mozes da mi objasnis delove koda?
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: cha izmedju dva racunara u mrezi01.06.2010. u 10:58 - pre 169 meseci
Nemaš mnogo koda. Što ti nije jasno?
 
Odgovor na temu

milos 2
milos ljatkovic

Član broj: 148450
Poruke: 669
*.dynamic.sbb.rs.



+3 Profil

icon Re: cha izmedju dva racunara u mrezi01.06.2010. u 19:06 - pre 169 meseci
zasto se kod servera kada primi IP adresu sakljucava lista

ali nije vise bitno
 
Odgovor na temu

[es] :: C/C++ programiranje :: cha izmedju dva racunara u mrezi

Strane: 1 2

[ Pregleda: 6523 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.