[ Nevena79 @ 28.11.2008. 18:10 ] @
Ne znam nista o datoj temi. Moze li mi neko objasniti kako to uraditi?
Npr u aplikaciji 1 imam dugme posalji
Code:

private sub command1_click()

'poslati string "Nevena"
end sub


Aplikacija2 prima string

Code:

private sub command2()
      text1.text=primljeni_string
end sub
[ Aleksandar Vasic @ 29.11.2008. 09:04 ] @
Kod za povezivanje na odredjeni IP

Code:
Private Sub Command1_Click()
Winsock1.RemoteHost = Text1.Text
Winsock1.RemotePort = 1100
Winsock1.Connect
End Sub



Kod za slanje teksta iz textboxa gde je Text2 taj textbox
Code:
Private Sub Command2_Click()
Winsock1.SendData Text2.Text
End Sub


Ukoliko je konektovanje uspelo, izbaci MsgBox sa tekstom "You're Connected"

Code:
Private Sub Winsock1_Connect()
MsgBox "You're Connected", vbInformation, "Connected"
End Sub


Otvaranje porta, tako da drugi mogu da se konektuju na vas

Code:
Private Sub Command3_Click()
W1.LocalPort = 1100
W1.Listen
End Sub


Ukoliko se neko konektuje na vas, program prihvata

Code:
Private Sub W1_ConnectionRequest(ByVal requestID As Long)
If W1.State <> sckClosed Then W1.Close
W1.Accept requestID
End Sub


Pri dolasku podataka sa drugog racunara, program "hvata" tekst i salje u textbox pod imenom Text3

Code:
Private Sub W1_DataArrival(ByVal bytesTotal As Long)
Dim str As String
W1.GetData str
Text3.Text = str
End Sub


Da napomenem da je potrebno da se ubaci kompnenta Winsock
[ Nevena79 @ 29.11.2008. 10:52 ] @
Jako lepo objasnjeno, bolje nije moglo. Hvala puno! Sada cu probati samo mi jedno nije jasno.Sta tacno od svega toga treba da sadrzi aplikacija koja salje a sta aplikacija koja prima? Pretpostavljam da neke stvari kao sto je otvaranje portova i slicno trebaju da imaju obe aplikacije pa se samo razlikuje onaj deo sto jedna prima a druga salje. Nesto cu pokusati ali mi svakako odgovori jer verovatno necu uspeti. I mogu li to isprobati na istom racunaru? Znaci da pokrenem u isto vreme da rade program za slanje i primanje i onda preko iste veze jedan posalje a drugi primi? I kako on uopste zna od koga da primi podatke jer u kodu ne vidim nigde neki odredjeni IP ili nesto preko cega bi on znao da mu bas moja aplikacija salje a ne necija druga?
[ Nevena79 @ 29.11.2008. 10:59 ] @
Znas sta bi bilo najbolje, kopiraj ovaj kod u VB pa mi uploaduj taj projekat, to ti je brzo, ok? Jer tako sigurno vidimo da radi a ja ovako ne znam da li gresim ili ne radi. Vec u prvoj liniji sto si mi napisao dobijem gresku Run-Time error 424
Object required! Moguce je da i ja nesto bitno preskacem a mozda je i sitan propust u kodu. Inace ubacila sam kontrolu Microsoft Winsock Control 6.0 (cisto da znas, mozda treba nesto drugo)


Ps. zanemari ovu poruku o gresci, zaboravila sam staviti winsock i na formu :) samo sam je ukljucila u projekat :) Hm... u svakom slucaju ne dobijam poruku da je konekcija uspostavljena iako sam ubacila citav kod i u jedan i u drugi program. Heeeeeeelp!

Ceeeekaj, text1.text tu treba upisati odredjenu IP adresu? Kako ja da znam koja mi je IP adresa? Znam da imaju neki sajtovi za to ali sta kada ima promenjivu IP, nece valjda korisnik svaki put morati proveravati svoju addesu pa je upisivati pa onda da program radi? U svakom slucaju cak i da tako mora volela bih da mi i ovo objasnis ovako, cisto da skontam kako radi to povezivanje preko Interneta. Pisem sve u jednom postu da ne otvaram nove i ne pravim zbrku.

M-m nece.... upisala sam tamo IP adresu koju sam videla na sajtu whatismyip.org ali i dalje ne dobijam informaciju da su se 2 programa connectovala. Znaci startujem 1 program i pritisnem command1 i sto uradim i sa drugim i oboje rade, nema izvestaja o gresci niti o uspostavljanju konekcije. Kako se pise IP adresa? Sa 0 ili bez nje? Npr pise 77.105.48.... e sad da li se pise tako ili 077.105.048...? Ne vredi mi. Sacekacu da mi uploadujes project ako zelis, a zamolila bih te. Pozdrav!
I ne prepoznaje sta je W1?Pretpostavljam winsock1 ali i kada tako stavim izbacuje mi Invalid operation at current state cim je prvi put pozove ko command 3 za otvaranje porta da se konektuju na mene


[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 12:12 GMT+1]

[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 12:24 GMT+1]

[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 12:31 GMT+1]

[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 12:36 GMT+1]
[ Nevena79 @ 29.11.2008. 12:53 ] @
Prijatelju nije potrebno. Sada kada si mi rekao da se koristi winsock trazila sam kod oko njega po Internetu i uz pomoc koda i tvojih komentara za cega koji deo programa sluzi sve sam shvatila. Sada radi. Jedino mi mozes odgovoriti kako se resava problem oko unosa IP adrese? Npr neka firma ima programe koji rade u razlicitim gradovima i koriste istu bazu. Da li taj racunar koji je server mora imati nepromenjivu IP adresu ili se to moze drugacije resiti? Jos jednom puno hvala za pomoc! Pozdrav!
[ Nevena79 @ 29.11.2008. 14:14 ] @
Uspela sam i to, potrebno je samo upisati
Code:

Winsock1.RemoteHost = Winsock1.LocalIP


Nije ni cudo kakve dobre ucitelje imam :)
[ Aleksandar Vasic @ 29.11.2008. 14:55 ] @
time se konektujes na svoj racunar. Ukoliko zelis da napravis nesto kao chat izmedju 2 racunara, onda ti ne trebaju 2 programa vec 1 koji sadrzi sve ovo, samo treba da iskombinujes kako tebi odgovara. W1 = Winsock1 ne znam da li si ukljucila komponentu Winsock?
[ Nevena79 @ 29.11.2008. 15:06 ] @
Cekaj sekund. Time se konektujem na svoj racunar, to sam shvatila jer uzima moj IP. I napravila sam tako chat cisto da vidim da li prenos funkcionise i on radi ali radi samo izmedju 2 racunara. Kada program koji prima podatke umnozim tj imam 2 programa idem na konekciju i kaze konekcija ostvarena. Ja kazem ok. Onda kliknem u drugom programu koli prima podatke na konekciju i konekcija se uspostavi MEDJUTIM imam konekciju samo prema drugom programu a sa onim sa kojim sam se prvo konektovala nemam. Kako to da resim? Helim da ono sto posaljem prime OBA programa koja primaju.
I uopste mi nije jasno kako to zapravo radi. Jedan program upise svoj IP. Ok to je da se zna sa kim ce da se kaci. Onda program koji prima ima onu komandu liste i tu nadje taj ip i valjda tako znaju koji ce program sa kojim da komunicira. Ali sta se desava ako ja napravim neki drugi program ne vezan za tu tematiku koji takodje ima istu IP posto je na istom racunaru. Kako ce onda aplikacija znati da ne treba da ima vezu sa tim programom (npr chatom) nego da treba da ima vezu sa nekim knjigovodstvenim programom npr. Evo okacicu kod da ga vidis da ga mozes ispraviti. Znaci treba da imam vezu sa svim programima.

Startujes program, kliknes prvo na LISTA pa onda na KONEKTUJ. Ne moras upisivati IP stavila sam da uzme tvoj onom naredbom. I nije mi jasno zasto mora tim redosledom, prvo na liste pa onda na konektuj zasto ne moze obrnuto? E sad ti da bi video kako bi radilo sa 3 aplikacije, posto su tu 2 ti napravi jos jednu formu, kopiraj sve sa forme 2 u tu novu formu i kod i izgled i odmah si je napravio, kao da imas 2 aplikacije koje primaju i jednu koja salje. I probaj , uvek imam vezu samo izmedju 2. E da i dodaj u form1 load da pokaze i formu 3. To je sve.
[ Nevena79 @ 29.11.2008. 15:20 ] @
Posto te nema dosta dugo mozda nisam bila najjasnija oko pitanja IP pa da pojasnim da ne gubimo vreme.
Aplikacija jedan otvara vezu i kaze da se otvori preko nekog IP
Code:

'povezivanje na IP
    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Winsock1.LocalIP 'ovako sam cita moju IP
    Winsock1.RemotePort = 12345 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Connect


to ok, e sad aplikacija koja prima ima ovak kod
Code:

'uspostavlja vezu
    Winsock1.Close
    Winsock1.LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Listen


Ovde se ne nalazi nikakva IP adresa pa kako onda da zna na koga da se prikaci???? I kako ne zaluta u neku drugu aplikaciju sto je pisao neki drugi programer i povezuje svoje programe ako razumes sta pitam?
[ Aleksandar Vasic @ 29.11.2008. 15:33 ] @
Evo prepravio sam tvoj projekat, u principu, tvoja ideja sa 2 Winsock kontrole je nepotrebna a i po meni nije bas dobro resenje, ja sam ti sve spakovao na 1 formu i preko 1 Winsock-a.

Ako ima nesto nejasno pitaj...

Sto se tice toga kako da zna na koga da se prikaci, jedina mogucnost je da znas njegov IP i da on u isto to vreme pokrene aplikaciju... Ako mislis da napravis neki chat koga ce dosta njih da koristi onda to ne mozes ovako lako :)
[ Nevena79 @ 29.11.2008. 17:00 ] @
Pokusala sam da napravim 2 ova programa i kada startujem jedan sve je ok ali kada pokrenem drugi kaze adress in use! Stane tamo kod listen pre nego sto mi uopste i pokaze formu, kada zapocne da izvrsava form_load. Nisam jos pogledala kod, pokusacu nesto da promenim ako moze ali za sada ne radi :(

A sta je problem sa 2 winsock? Oni ne trebaju da su u istom programu napravila sam 2 forme koje su odvojene kao 2 programa i razmenjuju informacije ne uokviru sebe nego iskljucivo preko Interneta kao 2 zasebne aplikacije
[ Nevena79 @ 29.11.2008. 17:07 ] @
U sustini ne treba mi za chat, to je samo zgodan primer nego za komunikaciju sa nekim datotekama izmedju vise racunara, naprimer nesto slicno kao da koriste istu bazu podataka s tim sto to ne mora biti bas baza neko i skup datoteka. Primera radi moze te program da me obavesti kada ga neko instalira ili u koliko je nepropisno instaliran, sto znaci da ga neko krade pa ga ti lepo preko interneta iskljucis i slicno. Ima dosta primena.

Malo sam experimentisala i na onaj moj stari nacin u sustini radi ali jos mi tamo ne stima jedna stvar. Npr kako da posaljem vise stvari od jedno? Tipa, npr aplikacija koja salje ima jedan odredjeni unos npr. ime, prezime i broj telefona. Ako kazem Winsock1.SendData ime:Winsock1.SendData prezime:Winsock1.SendData broj onda dobijem u aplikaciji koja to prima sve zgurano u jedan string. E sad ja bih to mogla cepkati ali sa druge strane string je vrlo ogranicen i sta ako se prenosi neki duzi text, u string ne bi stalo a i da stane morala bih taj string seckati i izvlaciti te podatke sto bi usporavalo aplikaciju. Znaci jednostavan problem, saljem sa jedne aplikacije ime, prezime i broja, mogu li te podatke u aplikaciji koja ih prima dobiti kao 3 razlicite promenjive pa da ih odmah mogu npr primiti i ubaciti kao takve u neku datoteku?

Pokusala sam sada neto. Mislim da to sluzi iskljucivo samo za povezivanje 2 aplikacije i ne vise. Cim druga aplikacija pozove Winsock1.Listen u koliko je neka 3 aplikacija vec uzela dolazi do greske, kaze da je zauzeta.


[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 19:10 GMT+1]

[Ovu poruku je menjao Nevena79 dana 29.11.2008. u 19:50 GMT+1]
[ Nevena79 @ 29.11.2008. 20:14 ] @
Mislim da sam upavo shvatila princip rada. Kada se aktivira konekcija program ceka komandu listen BILO ko da joj posalje BILO gde u svetu. Prvi program koji se poveze i veza je uspostavljena a drugi ne mogu. Znaci ako ja i jos neko napravi neki program koji koristi winsock i upalimo aplikacije u isto vreme jedan drugome smetamo. To je blago receno neozbiljno. Gde bih mogla nauciti neki normalniji nacin povezivanja? A vec znam i ko ce mi odgovoriti :)
[ Aleksandar Vasic @ 29.11.2008. 22:13 ] @
Ne razumem kako jedan drugome smetate? 2 aplikacije koje imaju u isto vreme ukljuceno "slusanje" porta ne smetaju jedna drugoj...Jednostavno ti time otvoris svoj port tako da drugi mogu na njega da se povezu. Sto se tice drugacijeg povezivanja ja stvarno ne znam, ali mozda kolege znaju, pa eto...sacekaj jos nekoga :)
[ Nevena79 @ 29.11.2008. 22:19 ] @
E onda je u tome caka, znaci bitan je potr. Mozemo slusati oboje ali ne mozemo koristiti isti port. Ali opet mi ostaje jedan problem, tj 2.
Kako poslati vise podataka i da ih primim odvojeno kao ime, prezime i broj i ne manji problem je sto i dalje ne vidim da mogu povezati vise od jedne aplikacije na "server" aplikaciju. Tj moze ali prvo moram prekinuti konekciju sa proslom aplikacijom i povezati se sa novom. Znaci jos nisam uspela spojiti 3 aplikacije, uvek rade samo 2. Ali svakako hvala na puno truda.
[ Aleksandar Vasic @ 29.11.2008. 22:33 ] @
Nije bitno da li na tvom racunaru i drugom racunaru isti port, samo je bitno da pri konektovanju, ti uneses port koje je otvoren na drugom racunaru, a on port koji je otvoren na tvom racunaru. Sto se tice povezivanja vise aplikacija, mislim da i to moze, npr ti otvoris jedan port (12345) i samo sa vise racunara povezes na taj isti port, trebalo bi da moze... Npr:
Code:
 ___________
|          |-------1. Client
|Server(ti)|
|__________|-------2. Client


E sad ti kao server npr imas IP adresu 192.168.0.1 i otvaras port 12345

Znaci postavljas Listen na port 12345
Klijenti takodje moraju otvoriti neki port da bi mogli da primaju podatke, npr isto 12345
E sad oba tvoja klijent se konektuju na IP 192.168.0.1 na port 12345(ovo je samo zamisao nisam siguran da bi radilo)
I oni mogu da salju podatke i server da ih prima. Medjutim da bi server slao svim klijentima podatke, prvo sto mi pada na pamet je sledece
Da IP adrese klijenta snimi u neki Listbox i onda kada hoces da posaljes odredjeni tekst svim klijentima onda radis petlju npr:

Code:
For i = 0 To List1.ListCount
Winsock1.RemoteHost = List1.List(i)
Winsock1.Connect
Winsock1.SendData string
Next i


ova FOR petlja se znaci konektuje na sve IP adrese koje su u Listboxu i pri tome svakome salje string.

E sada da posaljes vise podataka, npr iz vise textboxova(pretpostavljam da to zelis) mozes npr da uradis

Code:
Winsock1.SendData Text1.Text & Text2.Text & Text3.Text

e sad kako ce klijent to da primi sve zavisi kako formatiras tekst, npr mozes izmedju svakog textboxa da ubacis vbCrLf (time ubacujes novi red)
[ Nevena79 @ 29.11.2008. 22:48 ] @
Mmmm... probaj ovako, vidi gde je problem... Isti program (valjda ga nisi obrisao a ako jesi skini ga ponovo) pa ga pokreni 2x, otvorice se 2 zasebna programa ili pokreni jedan u exe verziji a drugi iz VB koda pa ces moci pratiti sta se desava. Ukoliko je exe program konektovan preko potrta 12345 kada pokusas da se konektujes sa vb programom nece se desiti nista jer exe program ni ne osluskuje vise u potrazi za novim prikljucenjima a ako mu ponovo osvezis listu konektovace se drugi program ali ce nestati konekcija za prvi.
Znaci ako je server prihvatio konekciju sa jednim programom i pokusa da mu se prikljuci drugi ne desi se nista. Ako na serveru ponovo kliknes na osvezavanje pa se konektujes sa drugim programom drugi ce se konektovati ali ce prvi ostati nekonektovan. Nemoj da bezis od onog mog prvog koda :)
Malo je mozda cudan ali radi. Skini ga, napravi exe i 2x pokreni, videces.

I mislim da si nesto sada pobrkao. Server valjda ne treba da se konektuje sa clijentima, server skenira a klijenti se konektuju. Kada je konekcija ostvarena koliko se secam server samo salje string klijentu bez onog dela sa povezivanjem jer valjda kad se veza ostvari ostvari se u oba pravca, a server posle samo salje bez biranja na koji ip to se negde automatski odradjuje i mislim da je bas tu problem zasto ne znamo da povezemo vise od 2 .

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 00:09 GMT+1]
[ Aleksandar Vasic @ 29.11.2008. 23:06 ] @
Problem je u tome sto ti to sve radis na jednom racunaru, probaj sa nekim to da odradis, npr. das nekome tu aplikaciju oboje je otvorite, kazete jedno drugom IP adresu i probate da se konektujete jedno na drugo. U principu to sto si radila da 2 puta startujes na jednom istom racunaru, problem je jer je taj port 12345 vec otvoren, onda drugi program ne moze da ga otvori opet jer je vec otvoren. Mozda te nisam dobro razumeo, izvinjavam se ako objasnjavam pogresnu stvar.
[ Nevena79 @ 29.11.2008. 23:12 ] @
Hm... ja bih rekla da je bas problem u tome... vrlo verovatno... Ima li neke svrhe da to stavljam na virtuelnu masinu pa jedan prog da radi tamo? Pretpostavljam da nema jer taj port je u glavnom racunaru jel tako? Al opet me kopka kako ne kaze da ima neka greska kao ne mogu da otvorim taj port ili nesto slicno nego se ne desava nista? Ali probacu, velika je sansa da bas tu lezi srce problema

Uploadovacu program, pokusaj da se konektujes u 15 do 1h ako te nema onda u 1h a posle idem spavati. Znaci samo klikni ka konekciju.

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 00:40 GMT+1]
[ Nevena79 @ 30.11.2008. 09:22 ] @
Dobro jutro :)
Da li je ispravan program isprobala sam na sledeci nacin:
U servera san stavila
Code:

    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Text1.Text 'ovako sam cita moju IP
    Winsock1.RemotePort = 12346 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Connect

i
Code:

'uspostavlja vezu
Winsock1.LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
Winsock1.Listen

znaci on se kaci na port 12346 a osluskuje port 12345

Klijent ima obrnutu situaciju
Code:

'povezivanje na IP
    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Text1.Text 'ovako sam cita moju IP
    Winsock1.RemotePort = 12345 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Connect


i
Code:

'uspostavlja vezu
Winsock1.LocalPort = 12346 'ovaj broj mora biti isti u obe aplikacije
Winsock1.Listen


klijent se konektuje na port 12345 koji server osluskuje a sam osluskuje port 12346 sa koga ocekuje odgovor od servera i na ovaj nacin se ne desava ono sto si rekao da dolazi do zbrke jer oboje koriste isti port.
I stvarno tako radi vrlo lepo. E sad dolazi u igru treci klijent i njemu sam stavila da osluckuje neki 3 port a konektuje se na 12345 koji osluskuje server i ne dodje do konekcije. Samo uspevam 2 da povezem.
[ Aleksandar Vasic @ 30.11.2008. 09:36 ] @
Dobro jutro i tebi :)

ajd cim nadjem malo vremene isprobacu da konektujem 3 programa, znaci za nekih max sat vremena, bas me interesuje da li Winsock podrzava vise konektovanja na jedan port.
[ Aleksandar Vasic @ 30.11.2008. 09:59 ] @
Evo probao sam i u pravu si.

Na jedan port moze da se prihvati samo jedan klijent, sto znaci ako hoces vise klijenata ili treba vise Winsock kontrola ili da se uradi neka petlja za prihvatanje...ne znam ni ja...
[ Nevena79 @ 30.11.2008. 10:00 ] @
Dobro, ja mislim da sam probala jer ovako kako sam izmenila za razliku od pre kada je izbacivao gresku sada radi ali 3 nikada nisam uspela konektovati jer kao da posle prve konekcije on ne skenira da li ima novih prikljucenja, mozda on i podrzava ali bi trebalo nesto dodati u kod tako da nastavi da skenira...

Znala sam da sam upravu :)
[ Aleksandar Vasic @ 30.11.2008. 10:07 ] @
Trebalo bi dodati da server cim primi neki podatak odbaci sve klijente, a klijenti prilikom svakog slanja podataka se ponovo konektuju. Moguce da ce to pomoci, ajd probaj :)
[ Nevena79 @ 30.11.2008. 10:14 ] @
Vidis dobra ideja, mislim da bi moglo proci uz jednu ispravku, ne odbaci sve klijente nego JEDNOG klijenta :) na zalost. hehe
[ Nevena79 @ 30.11.2008. 10:34 ] @
Trala lala to je resenje! Nisam probala tako da sva 3 komuniciraju to ne mogu bez drugih racunara ali sam uspela da 2 klijenta salju text na server E sad samo nisam sigurna da li ce server raditi kada salje njima... hm... sada mi je palo na pamet bas dok ti pisem. Princip je sledeci, napravila sam da kada server primi podatke znaci opcija getdata odmah ispod nje ide opcija winsock1.close znaci izgubi vezu a klijenti ne uspostavljajiu vezu odmah nego kada ides na send prvo uspostave vezu pa kada dobiju informaciju da je uspostavljena salju podatke. E sada, ako server cim primi podatke izgubi vezu nece moci poslati programu koji ga je pitao odgovor, mada evo sad vise nemam ni pojma, mozda i hoce jer i on sadrzi isto deo za povezivanje. Sad mi je puna glava, idem do radnje pa kad se vratim a to ce brzo postavicu izmenjen program pa ga pokusaj testirati. Mozda ce i raditi. Brzo cu, cao, za jedno pola sata.
[ Nevena79 @ 30.11.2008. 10:47 ] @
Evo ti vb verzija, saljem ti u kodu da mozes ispraviti ako sam nesto propistila jer sada ga sama ne mogu ispitati posto sve radi preko istog porta. Napravi exe i mislim da ce raditi.
Ima jedan nedostatak, kada server primi poruku on prekida vezu ali da bi mogao poslati poruku klijentu tako da pri slanju klijent postane server a bivsi server klijent onda stari klijent mora poceti da osluskuje svoj port! Znaci kada klijent posalje poruku mora poceti da osliskuje (ono listen), a server da prekine vezu sto vec radi. Samo to promeni

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 12:05 GMT+1]

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 12:05 GMT+1]
[ Aleksandar Vasic @ 30.11.2008. 11:04 ] @
Evo izmenio sam sledece:

- Prilikom pokretanja programa pita koji port da koristi kao lokalni
- Kada klijent posalje neki tekst, server primi automatski se otvara upit sta odgovoriti klijentu
[ Nevena79 @ 30.11.2008. 11:17 ] @
Da s tim sto dok god ja ne odgovorim serveru nesto niko drugi se na njega ne moze prikljuciti sto je velika mana. Hajde da se fokusiramo na onaj poslednji primer sto sam okacila mislim da je bolji jer sve se desava u sekundi. Ne mora on da odgovara pojedinacno odredjenom klijentu neka odgovor dobijaju i vide svi. Znaci samo treba dodati da kada klijent primi poruku od servera veza puca i on pocinje da osluskuje kao sto sam napravila i za server da kada primi poruku puca veza i osluskuje. To je vec napravljeno za servera ali ne znam zastpo mi nece kada dodam jos ta 3 reda kod klijenta. Razumes?
PS i ovaj tvoj primer mi bas i ne radi skroz. Ideja sa podesavanjem portova je super tako da mogu probati i na jednom racunaru, kada saljem nesto veza se uspostavi ali se ne prenese i text e to se bas desilo i meni kada u svoj primer dodam ta 3 reda da klijent posle slanja izgubi vezu i pocne da osluskuje, isto tako server ne primi njegov odgovor a bez ta 3 reda sve radi ok, stvarno ne razumem zasto, kao da veza pukne pre nego sto on uspe da posalje taj podatak, mislim da je u tome stvar jer ta programska linija dodje mozda pre nego sto se izvrsi prethodna za slanje?
[ Nevena79 @ 30.11.2008. 11:29 ] @
Znaci ovo je problem i kod mene:
Code:

Winsock1.SendData odgovor
'primio je podatke,odbacuje konekcije i ceka novu
Winsock1.Close
Winsock1.Listen

posle slanja ako ne stoji nista poslace poruku ali ako stoji ovo ispod prinio je podatke, odbacuje.....
onda nekako ne posalje poruku ili je pak ovaj drugi ne stigne primiti
[ Aleksandar Vasic @ 30.11.2008. 11:55 ] @
Sto se tice ovog da ne moze onda niko drugi da se konektuje, moze da se napravi nesto tipa, kada klijent hoce da se konektuje da se postavi neki timer koji ce da pokusava da se konektuje vise puta, sa cekanjem izmedju svakog konektovanja npr od 5 sekundi, a za ovo drugo stvarno ne mogu da provalim u cemu je problem :\
[ Nevena79 @ 30.11.2008. 11:58 ] @
A da li bi nesto promenilo kada bi svaki program imao 2 winsock-a. Preko jednog iskljucivo salje a preko drugog iskljucivo prima podatke a ne kao do sada da preko istok i salje i prima samo menja portove?
[ Aleksandar Vasic @ 30.11.2008. 12:01 ] @
Probaj :)

Neka jedan bude samo za primanje podataka znaci ono Listen, a drugi za konektovanje na druge racunare i slanje podataka
[ Nevena79 @ 30.11.2008. 12:09 ] @
Nesto sam probala na brzinu i dobila isti rezultat, uspostavi konekciju ali ne posalje, ne znam mozda mi je nesto i promaklo. O koliko muke sa 10 programskih redova.... ne verujem! Mada mi nema logike da se to desi, jer jedan winsock treba stalno da skenira, nema prekida i ne brine oko menjanja portova, znaci jedan stalno ceka podatke a drugi winsock stalno salje podatke.
[ Shadowed @ 30.11.2008. 12:15 ] @
Nevena, da li bi rekla sta tacno zelis da napravis, tj. da li ti treba nesto konkretno ili samo tako isprobavas? I takodje da li je obavezno da bude VB6?
[ Nevena79 @ 30.11.2008. 12:30 ] @
Treba mi konkretno da ovo proradi :) zbog ceka? Ne zbog chata nego da skontam kako mogu slati podatke izmedju aplikacija i to tako da svaka moze da komunicira sa svakom ili da svaka moze da komunicira sa jednom glavnom. Primera radi imas 5 aplikacija u razlicitim gradovima a koriste neku bazu sa jednog glavnog racunara (servera) ili npr prilikom instalacije nekog programa da u koliko primeti da nesto nije podeseno kako treba znaci program su malo neovlasceno pozajmljivali jedni drugima cim nije propisno instaliran i onda meni posalje poruku cija aplikacija je data i dalje je sve lako itd itd... Znaci ne treba mi chat nego preko njega samo vezbamo i istreazujemo mogucnosti te winsick kontrole a treba mi generalno razmena razlicitih podataka izmedju aplikacija. Ne mora u VB6 mada bi bilo pozeljno, moze i u VB.NET, sa njim polako pocinjem mada je manje vise sve slicno i uspela sam da prevedem pad programa u njega mada jos ne mogu da kazem da se u njemu osecam kao kod kuce za razliku od VB6
[ Aleksandar Vasic @ 30.11.2008. 12:45 ] @
Eto sta se desi kada ne objsnis na pocetku sta ti treba :) Sve sto smo pisali je nepotrebno, ukoliko hoces zajednicku bazu za vise programa, da mogu da razmenjuju podatke, onda treba podici mysql bazu na neki server, i napisati programe koji jednostavnu citaju/pisu/menjaju bazu...
[ Nevena79 @ 30.11.2008. 12:54 ] @
Dobro ali ne mora to biti baza, mogu i obicne datoteke za obicne programe. Evo najgluplji primer. Telefonski imenik koji popunjavaju sva odeljenja u jednoj firmi i koji takodje svi i citaju. Nije potrebna baza podataka. Znam nesto malo oko acessove baze, ono udji procitaj, promeni, pronadji preko data kontrole, ali pretpostavljam da je to komplikovano da me neko ovako uci pa sam zato pitala kako poslati podatke izmedju aplikacija sto smo do sada radili. A ako znam to onda ja mogu poslati podatak i iz baze i iz datoteke ili neki string kao sto smo pravili chat, apsolutno svejedno, princio je isti. Bavim se amaterski programiranjem mada to amaterski traje vec 20 godina (duze nego neki profesionalno :) ) pocela sam na commodore 64 pa neki programi na amigi 500 pa kad je dosao PC u GWbasic-u posle u Qbasic-u pa vb6 i sada malo u .net-u. S vremena na vreme napravim poneki program za siru upotrebu obicno u vrednosti od 300-500e i to mi bude dovoljan extra prihod kad nesto zatreba. E sad poprilicno dobro vladam aplikacijama na jednom racunaru ali imam hendikep jer ne znam nista oko povezivanja preko interneta a danas ga svi imaju. A sem toga cesto je potrebno i makar u jednoj firmi gde imas racunar na spratu da povezes njega i onoga u prizemlju da preuzimaju podatke. Kako nemam pojma o tome nista rekoh da malo poguram stvari :)
[ Aleksandar Vasic @ 30.11.2008. 12:57 ] @
Najbolje i najlakse resenje ti je baza. Ali access baza nije dobro resenje...

[Ovu poruku je menjao Aleksandar Vasic dana 30.11.2008. u 14:57 GMT+1]
[ Nevena79 @ 30.11.2008. 13:01 ] @
Procitaj i post gore, menjala sam ga dok si ti pisao prethodni post :) Dobro, a da li je to tesko za nauciti ovako? Ima puno? Ako je kao sto smo do sada ispisali macji kasalj :)
[ Shadowed @ 30.11.2008. 14:05 ] @
Aleksandre, ti se bas uhvatio MySql-a
Access moze biti ok resenje ako imas midle layer iako i sam moze prihvatiti vise konekcija. A od baza imas free pored MySql-a i MS Sql (koji preporucujem jer se vec radi u MS tehnologijama) i Posgree.

Ovako.. Imas manje/vise tri mogucnosti:
1. Varijanta prihvatljivog kvaliteta, relativno laka za kapiranje - ova koju koristis sada, sa winsocket-om. Preporucljivo ako neces malo vise da ucis a hoces da se zezas, pa i uradis nesto.
2. Varijanta sa malo vise mogucnosti, malo teza za kapiranje - rad sa TCP/IP-om u .NET-u. Asinhrono je mao teze ali kad naucis, skroz je kul Isto kao i prvo, samo naucis vise i imas malo vise fleksibilnosti.
3. Varjianta sa puno mogucnosti, laka za kapiranje ako vec znas OOP u .net-u - .NET Remoting i/ili Web services, zavisi sta pravis. Ovo je preporucljivo ako je glavni cilj da napravis ono sto ti treba, a igranje ti je sekundarno (a moze, nije da ne moze)
[ Nevena79 @ 30.11.2008. 14:15 ] @
Ja sam otvorena za svaku mogucnost. Na tebi je, odluci sta ces mi lakse objasniti jer nije bas da se vidimo :) daljina je to :)
[ Nevena79 @ 30.11.2008. 14:21 ] @
Od toga bi se mogao napraviti lep tutorial i nadasve koristan. To je lepa tema i kladim se da je 90% ovde na forumu ne zna, pa bi svakako bila posecena
[ Shadowed @ 30.11.2008. 14:37 ] @
Ukratko:
Web servisi su ti varijanta ako imas web server. Omogucavaju da imas metode (funkcije) koje se izvrsavaju na web serveru a pozivaju na klijentu gotovo bez ikakve razlike u odnosu na lokalne. Naravno, treba uzeti u obzir da je odziv sporiji i sl.
.NET Remoting je varijanta ako kreiras i klijentsku i serversku aplikaciju. Omogucava ti slicno prethodnom, s' tim da mozes na klijentu instancirati objekat, odredjivati mu property-e i pozivati metode ali tako da se to izvrsava na serveru (slicno kao kod web servisa samo sa mogucnoscu celog "remote oop-a", da tako nazovem).

Ako te nesto od ta dva (ili oba) interesuje, evo par linkova da se upoznas sa materijom, pa onda mozemo nastaviti. Cisto da ne bih ja pricao isto sto su i oni tamo. Za tutorijal ipak nemam bas vremena i volje jer to treba dobro osmisliti i teze je nego nekom odredjenom objasniti. A i ovi linkovi su manje/vise tutorijali.

Web servisi:
http://www.w3schools.com/webservices/default.asp
http://msdn.microsoft.com/en-us/library/ms972326.aspx

.NET Remoting:
http://www.developer.com/net/cplus/article.php/1479761
http://www.codeproject.com/KB/IP/Net_Remoting.aspx

Wbe services vs. .Net Remoting:
http://www.developer.com/net/net/article.php/2201701

Eto, pogledas malo, uputis se pa ako te interesuje, mozemo nastaviti sa tim, ali na .net forumu da ne pravimo offtopic ovde. Ako nastavljas sa VB6, tu slabo mogu da pomognem jer isti nisam koristio par godina a i nemam instaliran (btw, mozes sa winsock imati vise dolaznih konekcija na isti port;)).


PS.
Citat:
Nevena79: Ja sam otvorena za svaku mogucnost. Na tebi je, odluci sta ces mi lakse objasniti jer nije bas da se vidimo daljina je to

Pa, sad, otkud znas kolika je daljina ;]
[ Nevena79 @ 30.11.2008. 14:52 ] @
Hajde onda ovako, da zavrsimo sa ovom temom kada smo je vec zapoceli. Evo ti kod od ovoga sto smo sa winsock ja i tvoj kolega radili. Kada smo poceli hajde da to razradimo do kraja, nekada i nekome moze posluziti pa cemo videti za dalje. Kako da napravimo vise konekcija na isti port, gde gresimo?

Evo i izvorni kod bez komplikacija kako smo to bili zamislili i odlicno radi ali mogu se povezati samo 2 aplikacije, trecu ne prima pa nadji gresku!

Code:

Private Sub Command1_Click()
'povezivanje na IP
    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Text1.Text 'ovako sam cita moju IP
    Winsock1.RemotePort = 12345 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Connect
End Sub

Private Sub Command2_Click()
'salje podatak
 Winsock1.SendData Text3.Text
End Sub

Private Sub Form_Load()
'uspostavlja vezu
Winsock1.LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
Winsock1.Listen
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'hvata text i upisuje ga u text3
Dim str As String
Winsock1.GetData str
Text2.Text = str
End Sub
Private Sub Winsock1_Connect()
'obavestava da ste konektovani
MsgBox "Konekcija uspesna!", vbInformation, "Connected"
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
' ukoliko se neko konektuje program prihvata pristup
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub





PS. command1 je dugme konekcija, znaci da se program konektuje na neki koji je vec startovan i koji igra ulogu servera
Evo uploadovala sa ti i kod, iako nemas VB6 pokreni ga iz VB.NET (to imas) i onda ce te provesti kroz onaj wizard i manje vise videces kako je povezan sa formom ako ti nesto nije jasno a uz manju izmenu mozes ga i pokrenuti.


Off topic pogledala sam onaj drugi primer preko .NET valjda remote (zaboravih izraz) i to je radjeno u c-u. C sam nekada davno tek tek dotakla a ovaj visual i jos taj iz net-a ne znam ali vidim da mi deluje potpuno prosto pa bi to mogao kad imas vremena da prevedes u VB.NET? Bas mi deluje jednostavno i nema puno pisanja.

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 16:03 GMT+1]
[ Shadowed @ 30.11.2008. 15:11 ] @
U ovom delu:
Code:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
' ukoliko se neko konektuje program prihvata pristup
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub

Nemoj sa Winsock1 da radis Accept, nego sa nekim drugim. Recimo, mozes imati niz Winsock-ova (kao i bilo kojih drugih kontrola) pa onda dodavati prilikom svake konekcije nov winsock.
Ovako nesto:
Ako na Winsock1 stavis index 0, imaces ovako nesto:

Code:

private sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
    if index = 0 then
        Winsock1(0).Close
        Load Winsock1(Winsock1.ubound + 1)
        Winsock1(Winsock1.ubound).Accept requestID
        Winsock1(0).Listen
    end if
end sub


Ova provera da li je index = 0 nije toliko bitna, posto ti drugi nece osluskivati, ali za svaki slucaj. To je otprilike to, nadam se da nisam nesto izostavio, nisam mogao probati.
[ Shadowed @ 30.11.2008. 15:21 ] @
Citat:
Nevena79: Off topic pogledala sam onaj drugi primer preko .NET valjda remote (zaboravih izraz) i to je radjeno u c-u. C sam nekada davno tek tek dotakla a ovaj visual i jos taj iz net-a ne znam ali vidim da mi deluje potpuno prosto pa bi to mogao kad imas vremena da prevedes u VB.NET? Bas mi deluje jednostavno i nema puno pisanja.


Zapravo u C#. Ja vec navikao na oba pa nisam obratio paznju. Vecina primera je u C#-u jer je popularniji. Pogledaj MS-ov link, tu ima VB.NET koliko se secam. Previse bi bilo offtopic-a da sada ovde prevodim. Ako imas neki IM (jabber / gtalk / msn) mozemo tako.
[ Nevena79 @ 30.11.2008. 15:26 ] @
Ne, ne ne moras sada tu da prevodis, samo sam prokomentarisala da mi deluje da je jednostavno, to cemo posle u .NET forumu, sada kako prepraiti taj chat da se moze onektovati vise klijenata odjednom?
[ Shadowed @ 30.11.2008. 15:33 ] @
Pa, napisah iznad :)
[ Nevena79 @ 30.11.2008. 16:55 ] @
Vidim, ukrstile su nam se poruke. Nisam bila kuci, sada cu isprobati pa javim
[ Nevena79 @ 30.11.2008. 17:07 ] @
Ovako?
Code:

Private Sub Command1_Click()
'povezivanje na IP
    Winsock1(0).Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1(0).RemoteHost = Text1.Text 'ovako sam cita moju IP
    Winsock1(0).RemotePort = 12345 'ovaj broj mora biti isti u obe aplikacije
    Winsock1(0).Connect
End Sub

Private Sub Command2_Click()
'salje podatak
 Winsock1(0).SendData Text3.Text
End Sub

Private Sub Form_Load()
'uspostavlja vezu
Winsock1(0).LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
Winsock1(0).Listen
End Sub


Private Sub Winsock1_Connect(index As Integer)
'obavestava da ste konektovani
MsgBox "Konekcija uspesna!", vbInformation, "Connected"
End Sub


Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
'hvata text i upisuje ga u text3
Dim str As String
Winsock1(0).GetData str
Text2.Text = str

End Sub



Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
    If index = 0 Then
        Winsock1(0).Close
        Load Winsock1(Winsock1.ubound + 1)
        Winsock1(Winsock1.ubound).Accept requestID
        Winsock1(0).Listen
    End If
End Sub



Uspe da se konektuje ali kada pritisnem na dugme posalji kaza:
wrong protocol or connection state of the requested transaction or requested
[ Shadowed @ 30.11.2008. 17:20 ] @
Tako bi trebalo. Tada za svakog klijenta koji se zakacio imas po jednu winsock kontrolu (pristupas preko index-a i u svakom eventu imas index kojim odredjujes koji je izazvao event).
Jesino mi ovaj deo nije jasan:
Winsock1(0).LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
Tj. sta znaci da mora biti isti u obe aplikacije? Na klijentu ne mora, lokalni port na klijentu je nebitan (mislim da ako ne odredis on uzme neki slobodan, sto bi bilo najbolje). Na klijentu je bitno da ti RemotePort bude isti kao na klijetnu LocalPort.
[ Nevena79 @ 30.11.2008. 17:25 ] @
Znam to mi je ostao komentar iz prvog primera koji su mi napravili, tada sam mislila da to mora da se podudara. Ali Ok je tamo gde se prave novi winsock-ovi ali gde se ti podaci obradjuju u glavnom kodu? Tamo uvek stoji WInsock1(0)? Mislim da to ne valja. A daaaaaj preradi mi ga skroz pa ima 10 redova, vidis koliko to ovako razvlacimo :(
[ Nevena79 @ 30.11.2008. 18:17 ] @
Evo gde pukne, sad sam nasla ali ne znam zasto.
Code:

Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
'hvata text i upisuje ga u text3
Dim str As String
Winsock1(0).GetData str    <---- Ovde nastane greska
Text2.Text = str

End Sub

to se desi kada konektujem jedan klijent i jedan server i kada posaljem poruku tj kada je treba primiti onaj drugi program padne

Evo ispravke, nasla sam gresku,jaoj sta ja radim iz ovog foruma, ubice me moderatori :)

Code:

Private Sub Command1_Click()
'povezivanje na IP
    Winsock1(0).Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1(0).RemoteHost = Text1.Text 'ovako sam cita moju IP
    Winsock1(0).RemotePort = 12346 'ovaj broj mora biti isti u obe aplikacije
    Winsock1(0).Connect
End Sub

Private Sub Command2_Click()
'salje podatak
 Winsock1(0).SendData Text3.Text
End Sub

Private Sub Form_Load()
'uspostavlja vezu
Winsock1(0).LocalPort = 12345 'ovaj broj mora biti isti u obe aplikacije
Winsock1(0).Listen
End Sub


Private Sub Winsock1_Connect(index As Integer)
'obavestava da ste konektovani
MsgBox "Konekcija uspesna!", vbInformation, "Connected"
End Sub


Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
'hvata text i upisuje ga u text3
Dim str As String
Winsock1(index).GetData str
Text2.Text = str

End Sub



Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
    If index = 0 Then
        Winsock1(0).Close
        Load Winsock1(Winsock1.ubound + 1)
        Winsock1(Winsock1.ubound).Accept requestID
        Winsock1(0).Listen
    End If
End Sub


Nema greske ali sada se desava sledece. Uspostavim vezu i posaljem nesto i druga aplikacija to primi ali kada onda pokusam da posaljem iz druge aplikacije nastane greska ovde

Code:

Private Sub Command2_Click()
'salje podatak
 Winsock1(0).SendData Text3.Text
End Sub



PS Pokusala sam da se konektujem sa vise klijenata i to radi jedino ne radi da im server odgovori

Mislim da sam resila sve, sad mi jos trebaju dobrovoljci da isprobam :) Ima li ih???? Alexandre? Shnadow?
[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 19:30 GMT+1]

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 19:48 GMT+1]

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 20:05 GMT+1]
[ Shadowed @ 30.11.2008. 19:02 ] @
Koja ti greska nastane tu? Uvek nam navedi gresku koju ti prijavi.
Btw, vidim da saljes sa Winsock(0).SendData. Zelis li uvek slati sa njim? Obrati paznju da ti broj u zagradi oznacava kojem klijentu saljes.


Citat:
Nevena79: Evo ispravke, nasla sam gresku,jaoj sta ja radim iz ovog foruma, ubice me moderatori :)

Nece, ne brini :o)
[ Nevena79 @ 30.11.2008. 19:26 ] @
Bas sam to i ispravila. Spreman za test? Saljem ti aplikaciju
Moj IP je
Code:

77.105.26.40

mozes ga samo kopirati.
Stvari stoje ovako, ja cu biti server i ukljucicu program pre tebe da osluskuje i on ce tako da ceka...
Ti pokrenes aplikaciju kod sebe i u prvi textbox past-ujes ip adresu. Zatim ides na konekciju i uz mnogo srece bicemo konektovani, zar to ne zvuci lepo? :) Konacno cu ti biti malo blize bas kao sto si rekao :)
Poruku pises u drugi textbox i ides na send kad je saljes. Nije nista napisano ni graficki odradjeno, samo suvaka forma zato prati sta sam ti rekla.
Text primas u trecem textboxu i to je to.

PS. Naravno ponuda vazi samo za one koji se bave programiranjem i imaju instaliran VB6 jer ovo je samo exe fajl bez instalacije pa necete imati sve potrebne dll fajlove :p


[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 20:46 GMT+1]
[ Eurora3D Team @ 30.11.2008. 19:46 ] @
Nevena evo mali primer
http://eurora3d.com/es/winsockSample.zip
Ovo sam napravio na brzinu ... i konektuje vise klienata odjednom.
Ovaj primer (moras da ga iskompajlujes jer ne kacim exe - e) ima server i klient . Server prihvata vise konekcija (pusti vise klienata) i kad salje salje svima.
Nisam bas isao u detalje (zaboravio sam pomalo kako ide) al mi je ostala jedna greska . Posto server salje u petlji svima, slanje je uspesno samo prema jednom klijentu ... kad se ta petlja pusti u debug modu (polako) onda posalje svima. Mislim da je problem interval izmedju dva slanja (proveri)
poz

Da... i izvinite za java stil kod imena pomenljivih

[Ovu poruku je menjao Eurora3D Team dana 30.11.2008. u 21:51 GMT+1]
[ Nevena79 @ 30.11.2008. 20:11 ] @
Hajde probacu ga a posto ti imas VB6 skini ovo sto sam napravila pa uradi kakopise, moj server je otvoren samo da uspostavimo vezu da vidim ima li ovde propusta.
[ Nevena79 @ 30.11.2008. 20:31 ] @
Ja sam otvorila tvoj chat i videla sta mi pises ali ti nisi valjda sta ja pisem i onda je blokiralo ;) Otvorila sam server, pa sam otvorila jedan klijent i to sam bila ja pa si se prikljuvio i ti a ja sam pisala preko klijenta, nisam servera dirala. Eto a ono moje radi JEIEIEIE, isprobali smo trala lala :D
[ Eurora3D Team @ 30.11.2008. 20:37 ] @
Ostalo mozes da isprobavas na jednom PC-u zato sto radi isto ...
[ Nevena79 @ 30.11.2008. 21:12 ] @
Eurora jedna mi samo stvar nije jasna. Kako si se ti prikljucio na moj server ako ne znas koji je moj IP? Tj mozda i znas pa si stavio onaj sto sam poslala? Ali vidi sta me buni, ako si ti i upisao moj ip koji sam ti dala kako sam se ja kao klijent povezala sa serverom kada nisam menjala IP nego je ostao onaj koji si ti u programu stavio?

------------------------------------------------
Ne treba odgovor, naime do toga dolazi posto aplikacija redi na istom racunaru pa on to onda nekako po automatizmu valjda uradi ako nema one adrese da salje na IP racunara. Kada sam odvojila klijenta i servera tako da je jedan na virtuelnoj masini a drugi na racunaru nije mogao uspostaviti vezu, potrebna je TACNA IP adresa. Eto. Hvala svima koji su ucestvovali, drago mi je da vas nije mrzelo i sto samo ovo USPESNO priveli kraju.
Shnadow (ili tako nekako) jos cemo se druziti na .NET-u , ko ti kriv sto si se nudio :)
Pozdrav svima idem sada tamo da otvorim temu :)
HVAAAAAAAAALAAAAAAAAAAAA!!!!!

[Ovu poruku je menjao Nevena79 dana 30.11.2008. u 22:23 GMT+1]
[ Eurora3D Team @ 30.11.2008. 21:22 ] @
Citat:
Nevena79: Bas sam to i ispravila. Spreman za test? Saljem ti aplikaciju
Moj IP je
Code:

77.105.26.40


Pa znam da citam ... :)
A ti si se povezala sa serverom zato sto sam ja stavio popunjen TextBox u klientu sa adresom 127.0.0.1 sto je lokalni PC ili localhost da nebi moralo da se svaki put kuca kad se testira
[ Nevena79 @ 30.11.2008. 23:20 ] @
Eurora uspela sam prepraviti tvoj i primeniti u svoj server. Naime ne znam zasto u koliko napravis pauzu prilikom slanja on nece svima da posalje. Probala sam povecavati i sleep kao i stavljati for petlje da izigravaju pauzu i nije htelo. Onda sam dosla na ideju da kada kazes SEND ne posalje podatke svim klijentima na tom mestu neko startuje timmer1. On moze da ima i vrlo kratak odziv od samo 1, znaci tako ga podesis. Onda unutar koda za timmer kazes da svaki put kad ga izvrsi poveca neku promenjivu za jedan kao sto si i radio i salje winsock1(promenjiva) dok god ima winsock-ova. Kada ih nema samo iskljucis timmer i radi kao saliveno. Ispravi to i imaces program kao bombonica. Eto da doziveh da i ja nekome na istu ovu temu pomognem :)
[ Eurora3D Team @ 01.12.2008. 10:39 ] @
Hvala :)
Radio sam (profesionalno) intenzivno sa VB6 & winsockom pre par godina al se stvari zaborave , a kad sam pisao ovaj primer nisam mogao da nadjem nijedan stari kod.
U svakom slucaju nasla si resenje ... pa ako pravis nesto ozbiljnije eto imas osnovu ...
poz

Postavio sam prepravljen kod na isti link http://eurora3d.com/es/winsockSample.zip

[Ovu poruku je menjao Eurora3D Team dana 01.12.2008. u 12:02 GMT+1]
[ Nevena79 @ 01.12.2008. 17:46 ] @
Ako vec prepravljas za ucenje ili ti mozda zatreba za nesto ozbiljnije ja bih to uradila malko drugacije. Server bih ostavila da bude samo server i na njega se prikljucuju klijenti. U tvom primeru klijenti ne komuniciraju medjusobno(osim ako nisi prepravio u ovoj sad izmeni, nisam gledala) a da ne bi sada komplikovao oko toga kako da komuniciraju medjusobno i da svako sve vidi jednostavno dodas par redova na server. Naime kada server primi neku poruku sto radi i do sada ne mora samo da je upise u svoj prozor, nego automatski ide u petlju slanje (timmer koji si napravio) i to sto je primio posalje svima.(to je jedan copy/paste). Onda bi se desilo da onaj ko je poslao poruku ima u svom prozoru upisanu svoju poruku 2x. Jednom posto se upisuje ono sto si poslao i drugi put kada ti server vrati tvoju poruku jer je prosledjuje svima pa i tebi. Zato samo izbrises red kod klijenta posle slanja da upisuje u svoj prozor nego ce je poslati server. Znaci sta server primi od bilo kog klijenta salje svim klijentima i tako komuniciraju medjucobno. To ti je jedan copy\paste i rucno dodavanje 1 reda pa ti preporucujem da radi funkcionalnosti ispravis.Znaci na serveru ne treba niko nista da pise(mada moze) on se nalazi na nekom racunaru sa fixnom IP adresom a na njega se prikljucuju klijenti i to tako sto vec znaju koja je to IP adresa, nemoraju stalno pitati. Sve sto komuniciraju medjusobno svaki klijent vidi.

A druga zamerka je texnicke prirode.(to ne moras menjati, samo ti skrecem paznju ako krenes na nesto ozbiljnije). Sve poruke upisujes u texbox koliko vidim. On ima jedno ogranicenje, ne znam koliko texta moze da primi ali znam da ne moze jako puno. Znaci kada bi 30 ljudi razmenjivalo poruke, upisivale bi im se u textbox i vrlo brzo bi ga popunili i program bi pao. Moze se upisivati u njega ali s vremena na vreme moras brisati sadrzaj.

E i ovo bi mogao da ispravis da ne pise klijent 1, klijent 2, to ti je isto tako 1 programski red znaci ne puno posla a lepse ce izgledati i biti funkcionalnije. Kada otvore klijent program neka in inputbox pita za Nick. Posle prilikom slanja poruke poruku salje u formatu Nick+">"+text_koji_salje i tako ce se videti ko je sta rekao. Eto par sitnica, i pozrdavljam te !
Ovako nekako a ti sad pravi kod kako ti se svidja :)

Btw pocele da caskamo za test ja i moja drugarica kad uvideh jos jednu gresku tvog i mog koda, prozor u kome se vidi sta ti je ko odgovorio ne prati upis texta. Kada texta ima vise nego sto moze da se pokaze u prozoru pokaze se klizac ali se sve nove poruke ne vide nego moras posle svake poruke spustiti klizac da vidis sta su ti napisali :)


[Ovu poruku je menjao Nevena79 dana 01.12.2008. u 20:07 GMT+1]

[Ovu poruku je menjao Nevena79 dana 01.12.2008. u 20:12 GMT+1]

[Ovu poruku je menjao Nevena79 dana 01.12.2008. u 21:47 GMT+1]
[ Eurora3D Team @ 01.12.2008. 20:58 ] @
Necu da ga vise razvijam , to je primer , pa ako nekog zanima neka pogleda kako radi
Inace ja radim kao programer zadnjih 10-ak god , tako da vise nemam ambicije da napravim nesto spektakularno (kao sto obicno mastaju mladji)
A TextBox ima limit od 64k tako da ti treba nekoliko sati kucanja da ga popunis , mada za profesionalne programe primedba je na mestu (i ovo ostalo sto si pisala). Na poslu normalno radim detaljnije nego u primerima ...
Pozdrav i tebi

Sad sam video ovo sto si dodala
Pa redjaj tekst obrnuto , prvo novo pa onda ovo sto je vec bilo
txtBox.Text = newtext & txtBox.Text


[ Nevena79 @ 01.12.2008. 21:33 ] @
Zaboravio si novi red :) da ne lepi sav tex jedan na drugi :pPp
Evo ispravke svega za klijenta a server odgovara i onaj gore. E sad nesto da te pitam posto ne znam ni kako se to radi u praksi. Kada bi mi sad hteli od ovoga da napravimo stvarno chat, da moze puno ljudi da se prikljuci, prvo pitanje je koliko vinsock-ova moze da se doda u projekt jt koliko najvise ljudi moze da se prikljuci?
A drugo pitanje bi bilo, da bi to sve radilo da li bi server morao da se nalazi tu na Elitesecurity(pretpostavljam da on ima nepromenjivu IP adresu) i da je uvek upaljen a da se u kod klijenata ubaci ne da oni mogu manuelno menjati IP adresu kojij zele pristupiti nego da svi klijenti idu na tu nepromenjivu IP adresu Elitesecurity-ja? To je trenutno jedini nacin koji mogu da zamislim. Posle ko hoce da se pridruzi, samo skine verziju klijenta, prikljuci se i to je to? Ako to nije tako, kako se radi? Jer brine me onaj deo ok Ip adrese, zato sto veci broj ljudi ne moze uci jer ne zna koja IP adresa je glavna vec samo mogu manje grupe koje razmene svoje IP adrese.
[ Eurora3D Team @ 01.12.2008. 22:27 ] @
Evo redom (iako mi net programiranje a pogotovo chat nisu bas omiljena tema al ajde :) )
Imas 64k portova ali se oni ispod 1000 ne koriste zato sto su po konvenciji rezervisani za sistemske servise.
Znaci toliko korisnika
Mada prakticno (ovako u VB6-u) treba voditi racuna o brzini i koriscenju memorije tako da je mnogo manje.
Onda, ovaj protokol koji koristis u primeru je TCP komunikaciski protokol (mora da ima centralni server)
Ozbiljne chat aplikacije (Skype npr.) koriste UDP (winsock moze da se koristi i za taj protokol) gde ne moraju da imaju server nego samo adrese drugih a TCP server sluzi samo za logovanje & dobijanje tih adresa (da nebi bio preopterecen)
ES server koliko znam radi na Linux-u, tako da ti tu VB6 aplikacija nebi radila :) , inace svaki PC moze da ima staticku adresu pa tako i tvoj (mozes da zakupis kod provajdera) i nemoj nikad da ga iskljucujes :) da bi servis stalno radio i to je to

By the way ES ima chat (koliko se secam pisan u javi)




[Ovu poruku je menjao Eurora3D Team dana 02.12.2008. u 02:13 GMT+1]
[ Nevena79 @ 01.12.2008. 22:53 ] @
da ali kako da dobije adrese drugih na skype?Opet se mora konektovati na neki server sa statickom IP adresom pa da ih pokupi odatle. A i ovo se moze napraviti bas tako, znaci da server kada primi poruku ne salje svima tu poruku nego da server samo daje IP adrese klijenata a onda oni direktno izmedju sebe stvaraju konekcije i za to mi ne treba nikakav drugi protokol nego ovaj koji sad koristim zar ne? I kako koristiti taj drugi protokol i sta on menja i koji je bolji? Ne pitam te ja zbog Chata to ti uvek govorim, nego pomocu njega usavrsavam sve nacine koriscenja Winsock-a a mislim da sam ovo do sada sve skontala. Znam da mogu imati uvek istu IP ali ima i dinamicka svoje dobre strane psssssst :)
E i sad mi palo na pamet a kada bi se ip adresa promenila na neki nacin kao preko proxija da li bi on klijent video tu promenjenu adresu(a ja imam dinamicku) ili bi ipak mogao da se konektuje jedino na stvarnu? Svrha: da imam dinamicku adresu ali je preko toga uvek predstavljam kao istu.
I kad vec imam 100 pitanja sto da te ne pitam i ovo, malo je off topic ali moderatori ce da zazmure :)
Videla sam u .net da ima valjda neki emulator za mobilne telefone ili sta vise. Kako mislim tamo se moze praviti softver za mobilne ili ne? Ako moze jel isti princip programiranja kao za PC ili nije? Taj deo mi odgovori na private poruke da ne pravimo ovde zbrku.

[Ovu poruku je menjao Nevena79 dana 02.12.2008. u 00:03 GMT+1]
[ Eurora3D Team @ 02.12.2008. 00:30 ] @
:) Koliko pitanja
Ti si bas odlucila da postanes softver inzenjer za par dana ...
Ja sam ucio godinama ovo sto znam ... i nebi da sve istrosim na jednoj temi :)
Ukratko
Ozbiljni sistemi nemaju samo jedan login server , nego se konekcije prebacuju po potrebi (opterecenju)
Server zna klientovu adresu zato sto se ovaj prvo konektuje pa mu je posalje
Proxy serveri ne menjaju IP adresu PC-a nego samo vracaju pogesnan podatak , ako mislis na to , a sa tom pogresnom niko nece naci tvoj server
Programiranje za WinMobile me ne zanima ... imam telefon sa javom :) ... a ako mi bude trebao na poslu onda cu morati da naucim
To je to
Da, i ovo za UDP , to je protokol jednakih parova (nema servera). Nijedan nije bolji. Ustvari zavisi zasta ti trebaju , za nesto je bolji jedan a za nesto drugi.







[ Nevena79 @ 02.12.2008. 08:32 ] @
Citat:

Server zna klientovu adresu zato sto se ovaj prvo konektuje pa mu je posalje


vec par postova se vrtimo oko ovoga. Pomocu Winsock kontrole i da bi se klijent konektovao na server mora da zna serverovu IP adresu a kako je zna? Primera radi sve i da je server od ovog chata non stop ukljucen kod tebe na racunaru i da je napravljen tako kada se ja kao klijent konektujem na tebe da pamti moje IP i posle prosledjuje, ja se NIKADA necu konektovati na server jer ne znam koja ti je IP pa automatski ni ne mogu da napravim u codu kako da ko god skine klijenta kada ide na konekciju da se spaja na tebe. E to me zanima i onda cu da cutim :)
[ Shadowed @ 02.12.2008. 09:04 ] @
To se moze resiti dinamickim DNS-om.
Postoje i besplatni servisi. DynDNS ne znam da li je besplatan, ali no-ip.com ima i besplatan deo.
Od njih dobijas neko ime domena tipa tvojsubdomen.no-ip.org i na serveru instaliras program koji ce pri svakoj promeni adrese update-ovati DNS record kod njih.
Tada je dovoljno samo znati tu adresu tvojsubdomen.no-ip.org i konektovati se na nju, a IP ce biti validan.
Ne znam da li Winsock moze imati za remote address hostname, ali ako ne moze, verujem da ima vise primera na netu kako resolve-ovati hostname u IP.

Sto se tice programiranja za mobilne uredjaje, vrlo je slicno kao za desktop, samo sto se koristi compact framework koji nema sve sto i obican i naravno, treba imati obzira prema ciljanoj platformi i ne zahtevati previse od nje :)
[ Nevena79 @ 02.12.2008. 09:44 ] @
Malo previse koristis strucnih izraza za nekoga ko nema pojma o Internetu, serverima... :)
Ovako, tamo mozes otvoriti nesto kao svoj server sto je besplatno i onda na njega postaviti server svog programa i to tako radi? Onda je taj program uvek na istoj IP adresi i svi se konektuju na nju i taj chat radi?
[ Eurora3D Team @ 02.12.2008. 10:12 ] @
Sto race Shadowed DNS (DomainNameServers) . Domen je ime (npr. eurora3d.com) . Kad neko trazi ovaj server po imenu na netu, DNS serveri mu vracaju IP adresu. Inace sva internet komunikacija ide preko IP adresa a domeni su uvedeni da URL-ovi budu citljiviji.
Ovaj DynDNS o kom je Shadowed pisao (nisam se bavio ovim al sam sad nasao http://www.dyndns.com/services/dns/dyndns/) bi trebalo da radi ovako , (jednostavno objasnjavam) registujes se kod njih, izberes neko domen ime (i valjda skines neku njihovu aplikaciju) i kad ti se IP promeni sistem (valjda imaju neku aplikaciju) salje njima tvoju novu IP adresu i povezuje je sa imenom domena. Rezultat , tvoj PC je uvek dostupan preko imena domena. Mislim da u Winsocku moze da se koriste i domainNames kao i IP.
Citat:
Nevena79:  E to me zanima i onda cu da cutim :)

Meni nesmeta (verovatno ni drugima) a i forum je aktivniji ... jedino mozes da pokreces vise manjih tema.
[ Shadowed @ 02.12.2008. 10:23 ] @
Nije tako :)
Elem, prvo sta je DNS.
Posto svi uredjaji na Interetu komuniciraju preko IP adresa, potrebno je nekako znati IP raznih servera. Medjutim, ko ce to sve pamtiti. Cak i da imas spisak morala bi imati neko ime pridruzeno da znas sta ti je sta. Recimo, dodas u svoj "adresar" da je Microsoft na 207.46.19.254. Ali kako da saznas da je to taj IP pa da dodas u adresar? Tesko ces sama. Ono sto bi bu bilo resenje je da postoji neko centralno mesto gde postoji katalog za sve servere (ok, ne bas za sve, neki ne zele). E, nesto vrlo slicno tome i postoji. Samo ne pise da je Microsoft na 207.46.19.254 nego www.microsoft.com. Isto tako i za druge sajtove i servere uopste.
E sad, to ne znaci da MS koristi njihov server, vec je to samo kao neka vrsta kataloga i taj katolog je tako koncipiran da svi znaju kako da dodju do njega (ovo je inace dosta slozenije*, ali da ti ne komplikujem sada).
Ono sto je specificno za no-ip.com je to da ti uz pomoc tog programa azuriras taj katalog (koji je kod njih) kad god ti se promeni adresa.

Recimo, moj sajt je noreferer.no-ip.org i sam sajt se nalazi na mom serveru i program koji azurira unos u katalogu svaki put kada mi se IP promeni. Tako ce svako ko zatrazi IP od centralnog servera dobiti aktuelni IP.


*Takav centralni server zove se DNS (Domain Name System) server i nije bas samo jedan, to je distribuiran posao. Mozes imati i svoj unutar mreze koja nema veze sa Internet-om itd. itd. ali ti to nije narocito bitno sada :)
[ Eurora3D Team @ 02.12.2008. 10:36 ] @
@Shadowed
Kucali smo odgovor u isto vreme tako da pretpostavljam da ovo "Nije tako :)" nije bilo za mene :) ... bar nam se slazu odgovori :)
[ Nevena79 @ 02.12.2008. 10:44 ] @
Ok, malo mi je jasnije, ovoooooolicko :) Znaci to je nesto kao da ja necu da zakupim server kod nekog provajdera a hocu da imam svoj sajt. I onda se ja registrujem tamo i sajt postavim na svoj racunar. Kada god mi je upaljen racunar i konektovan na Internet neki program ce tom sajtu NO-ip poslati moju sadasnju adresu i svi ce uvek pozivanjem sajta www.ja.com pristupati mom sajtu sa mog racunara?
Ako je to tako imam 2 pitanja, jedno teze i jedno lakse...
*kako onda osposobiti kod clijenta(vracamo se na ovaj chat sto smo pravili) tako da se klijent konektuje na moj server(chat-a) a ne da ih uvek pita da sami unose ip adresu onoga sa kime zele da chatuju
Code:

    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Text1.Text 'IP adresa na koju se konektuje
    Winsock1.RemotePort = 12345 'port koji server osluskuje
    Winsock1.Connect

*nisam uspela nista da napravum na no-ip ne znam gde da idem, na pocetku uvek pratim free a na kraju me uvek pita to sto sam napravila da aktiviram i kada idem na aktiviranje uredno mi ponudi neki od iznosa u evrima :) moze li mi to neko napraviti, nije bitno pod kojim imenom samo da vidim kako te stvari rade (a na privete mi posaljete sifru)
[ Shadowed @ 02.12.2008. 12:34 ] @
Eurora, naravno, nisam video tvoj post dok sam pisao svoj.
[ Eurora3D Team @ 02.12.2008. 14:16 ] @
@Nevena79
Evo najjednostavije
Podesi ovaj DynDSN (imas link u mom tekstu gore).
Ako sve radi kako su napisali onda ce tvom racunaru moci da se pristupi preko trenutne IP adrese ili preko imana koje si registovala.
Zamisli to ovako ako ti je jednostavije , gde god bi klient aplikacija koristila trenutnu IP adresu tvog servera mozes da koristis domain name , koje je konstanta.
Znaci u onom chat klientu upises to ime kao adresu i to je to.
I ovo nismo pominjali ... na jednom racunaru moze da radi vise servera (npr. HTTP sa web, obicno slusa na portu 80, FTP fajl transfer, obicno slusa na portu 21 itd.) medju kojima moze da bude i ovaj tvoj (samo treba da slusa na slobodnom portu ). Svim serverima sa pristupa istom adresom (IP ili DN) ali na razlicitim portovima i razlicitim nacinima (protokolima). Povezivanje je ustvari isto ali kasnija razmena podataka je drugacija.
Ovo sto si pisala 'mozda bi server kad dobije neki podatak trebao da posalje ... itd' (parafrazirano) je razvijanje sopstvenog protokola (ili nacina komunikacije) koji je baziran na TCP-u kao lejeru ... itd.
Mozda bi trebala da nadjes neku dokumentaciju i sl. o ovome na netu ako te tema bas toliko zanima ... ovako pisemo "s brda s dola" :)
[ Nevena79 @ 02.12.2008. 18:07 ] @
I juuuuuu radi!!!! trala lala skok skok :)
Moj prvi zvanicni server konacno ONline :)))))
E sad samo jednu stvar da razjasnim. Stavila sam chat i pokusala pristupiti i sve je ok. Ali kada sam u chatu promenila port i stavila neki drugi on je svakako radio. Kako je to moguce? Znaci klijent chata je slao preko porta 1009 a server je slusao port 1001 i sve je radilo. Jedino kada promenim ime domena tamo u IP adresi onda se veza gubila sto je i normalno.
[ Shadowed @ 02.12.2008. 18:24 ] @
Koji si port promenila na klijentu? LocalPort na klijentu mozes menjati proizvoljno do 65535 i neces imati problema sve dok ne ubodes neki koji se koristi vec. Bitno je da remote port bude onaj koji je serveru local.
[ Nevena79 @ 02.12.2008. 18:34 ] @
Sorry moja greska, to sa portom je ok, nisam dobro pogledala. Mislim da sam iscrpela ovu temu, za sad :)
Sta da vam kazem nego hvala, eto, od srca. Ovo bas nista nisam znala.
[ Nevena79 @ 14.12.2008. 20:47 ] @
Imam jos jedno pitanje, zamisli :)
Kako vidim IP adresu onoga ko se konektovao na server (tj klijenta)?
[ Eurora3D Team @ 15.12.2008. 00:02 ] @
Napavi da klient programi salju adrese serveru. To je najednostavnije resenje
[ Nevena79 @ 15.12.2008. 09:50 ] @
Znam, tako sam i razmisljala. Mislis ovako?
Code:

Winsock1.LocalIP


Nisam sigurna, negde sam cini mi se procitala da to bas i ne radi ali sada ga ne mogu naci i jos mi se cini da si bas ti ucestvovao u diskusiji :)
Navodno tako ne dobijes uvek bas pravu IP adresu?

I jos nesto da te pitam, kako se pravilno koristi winsock kontrola za slanje vise poataka u nizu?
Primer:
Code:

For i = 1 To 5
Winsock1.SendData podatak(i)
Next i


Kada bi se ovo ovako poslalo prilikom primanja dobila bih sve strpano u promenjivu koja prima podatke winsock1.GetData.
Znaci promenjiva koja bi primila podatke pomocu getdata sadrzavala bi jedan string koji bi se sastojao od podatak(1)&podatak(2)&...podatak(5)
E sad, pretpostavljam da za to postoji elegantno resenje. Ja imam 2 ali mislim da to samo bespotrebno komplikuje program. Npr mogu da saljem podatke i posle svakog podatka da ide razmak i onda kada primim podatke da izdvajam delove stringa kao pojedinacne na nacin sto citam citav string i kada naidjem na razmak tu mi je kraj prvog podatka, pa trazim sledeci razmak i tu mi je drugi podatak itd, i drugi nacin je da napravim slanje podataka na nacin da server posalje prvi podatak, kada ga klijent primi on mu vrati string "primio" i kada ga server primi salje drugi podatak i tako u krug ali verovatno postoji elegantnije resenje?
[ Eurora3D Team @ 15.12.2008. 23:11 ] @
Mislim da nebi dobila povezan string. Svaki paket podataka koji se posalje je zaseban ... koliko se secam tako je u WinSock-u.
Znaci kad vise puta posaljes iz petlje sa druge strane dobijas nekoliko paketa podataka (za svaki okida poseban event).
Ali seti se sta smo imali kod servera ... nije mogao da posalje iz petlje nego smo pravili Timer da bi poslali iz nekoliko poziva funkcije za slanje ...
Dosta stvari vezano za komponente i sl. je objasnjeno u dokumentaciji , ali nije sve. Zato je za ovakve situacije najbolje da se eksperimentise
Napravis neki lak kod od nekoliko redova i isprobavas na razne nacine ...
A ovo za dobijanje IP - a , jesam pisao o tome ... evo nasao sam link http://www.elitesecurity.org/t320018-1#1925815
To je modul za dobijanje IP - a koji sam napisao.
Mozes da pogledas u mom profilu i neke slicne teme.
[ Nevena79 @ 15.12.2008. 23:27 ] @
Nece ih slati kao posebne pakete ni u for petlji niti kada se napise
Code:

Winsock1.SendData podatak1
Winsock1.SendData podatak2
Winsock1.SendData podatak3


I onda ih strpa u jedan paket.
Medjutim ako se sve stavi u onaj famozni Timer cak i kada je odziv 1 hiljaditinku sekunde tacno odvaja pakete. Zasto je to tako, ah ko ce ga znati. Avaj mislim da mi je lakse da ipak izdvajam podatke iz stringa koji dobijem pa sam pocela vec tako da radim. Pricala sam i sa Ruzicicem i on misli da je to jedini nacin, a sta se mora nije tesko.
E sada sto se tice IP adrese sada mi nije jasno moze li se koristiti za dobijanje IP a ona komanda preko winsocka ili se ipak mora pisati ceo onaj kod? I cemu onda Winsock1.LocalIP sluzi ako se na to ne moze osloniti? Potrebna mi je tacna IP adresa jer klijenti salju svoj IP serveru a onda ih server prosledjuje dalje klijentu koji je zatrazi da bi se klijenti medju sobom povezali i rasteretili server.Koristiti Winsock1.LocalIP ili ne?
[ Eurora3D Team @ 15.12.2008. 23:51 ] @
Ne
Na u onoj temi sa linka si mogla da vidis da su neki napisali (sa obrazlozenjem i zasto) da to nije pouzdan nacin, a i ja mislim isto ...
Znaci ipak si uspela da posaljes nekoliko podataka iz jedne petlje, bez Timera ? (ja nisam uspeo kad sam pisao taj primer)
U cemu je bio problem?
[ Eurora3D Team @ 16.12.2008. 00:00 ] @
Ustvari :) (sad sam povezao)
Ja sam slao u petlji, ali na razlicite kliente (WinSock niz) ... zato mi nije radilo.
Vidim da ti saljes vise puta ali samo na jedan WinSock.
Ovde kod slanja na vise (ili sa vise) WinSock - ova mislim da je problem sto se sve desava u jednoj funkciji (i neke sistemske stvari iz toga)
Kad se ubaci Timer to se resava

Kad sve uzmemo u obzir zakljucak je da sa WinSock-om (bilo sa jednim ili sa vise) moze da se posalje samo jedan paket podataka u jednoj funkciji.


[Ovu poruku je menjao Eurora3D Team dana 16.12.2008. u 01:28 GMT+1]
[ Nevena79 @ 16.12.2008. 08:47 ] @
Citat:

Znaci ipak si uspela da posaljes nekoliko podataka iz jedne petlje, bez Timera ?


Ne, ne nisam to rekla nego ako umesto petlje sve stavis u timer i ostavis odziv cak i jednu hiljaditinku sekunde i saljes vise paketa preko jednog winsocka (ne bitno da li je broj klijenata 1 ili vise) onda ce sve lepo raditi i slati svaki paket odvojeno a ako stavis npr da jednom klijentu salje 3 podatka i to tako cto ces sva 3 slanje upisati jedno ispod drugog kao sto sam gore napisala poslace ih kao 1 paket. E onda izmedju paketa upises neki znak ili skup znakova kojim ces odvajati pakete i posle ih na prijemu izdvajas kao posebne delove.
[ Nevena79 @ 16.12.2008. 08:56 ] @
Sve mi je jasno osim prakticnog dela.
Naime isprobala sam par puta, svaki put resetovala modem i dobila novu IP adresu i svaki put ju je winsock tacno ocitao. Da li problem nastaje retko ili on nikada ne ocita tacnu IP adresu?
Nisam pokusala da ih i povezem ali ne vidim zasto se ne bi povezali ako je IP adresa tacna. Evo primera da jeste. Gore je IP koju ocitava winsock a dole Ip koji ocitava onaj sajt.?????
[ Eurora3D Team @ 16.12.2008. 11:14 ] @
Znam to , al teoretski neko moze da ima mnogo komplikovaniji hardver nego ti itd. i to ne mora obavezno da radi kod svakog kako bi trebalo (na onoj temi imas nekoliko objasnjenja vezano za to). Ja sam vezano za dobijanje IP-ova u VB6 sebi 'uveo' praksu da uvek koristim onaj modul jer sam se na jednom poslu ranije dobro 'nazezao' sa ostalim resenjima i od tad samo to koristim.
Tebi ako radi i nemas nameru da taj program saljes nekom drugom koristi to ako ti je jednostavnije.
Ali ako nekom posaljes program i on ne ocitava dobro IP nemoj posle da pitas zasto nece :)

[Ovu poruku je menjao Eurora3D Team dana 16.12.2008. u 12:35 GMT+1]
[ vladobk @ 06.06.2009. 17:29 ] @
Morao sam da aktiviram temu jer prikaceni kod ne radi a i jos neki!!
citat:
Evo prepravio sam tvoj projekat, u principu, tvoja ideja sa 2 Winsock kontrole je nepotrebna a i po meni nije bas dobro resenje, ja sam ti sve spakovao na 1 formu i preko 1 Winsock-a.

prikaceni kod "Izmenjen.zip" ne radi na localhostu.

Moje iskustvo govori da su neophodna 2 winsock koontrole Winsock1 i W1 na jednooj formi ili dve forme sa po jednom kontrolom ili gresim

[ vladobk @ 23.06.2009. 15:42 ] @
izvinjavam se prikaceni fajl sockEs.zip nije potpun pa evo drugi
[ Nevena79 @ 24.06.2009. 13:29 ] @
Ne mogu da ti rade 2 programa u lokalu na ovaj nacin zbog ovih linija
Code:

    Winsock1.Close
    Winsock1.LocalPort = 12345 
    Winsock1.Listen


Kada pokrenes jedan program ws1 osluskuje na portu 12345
Onda pokrenes novi program i taj bi zeleo da osluskuje bas na portu 12345 a to nije moguce jer prvi program vec osluskuje na njemu, zato ti izbacuje gresku

Takodje ovo

Code:

Winsock2.RemoteHost = Winsock1.LocalIP


tu liniju promeni da ne ocitava tvoj IP nego da mu IP zadas iz nekog textboxa. Ovako ce raditi na tvom racunaru jer ce ip oba programa biti isti ali ako das nekome preko interneta necete se spojiti jer ce program pousati da se konektuje na svoj ip umesto na ip osobe kojoj nesto saljes
[ vladobk @ 27.06.2009. 17:14 ] @
aha!
na lokalnom racunaru br. porta mora biti razlicit
- text1 = 127.0.0.1
- prvo startujem server i on ceka na portu 12345
- zatim klijenta konektujem na ovaj port
- klijent ceka na portu 12346
- i onda se poruke ispisuju

hvala puno
inace onaj moj chat sam probao na internetu i radi ali ovako je lakse


[ Nevena79 @ 29.06.2009. 00:44 ] @
E to, tako ce ti raditi. Pozdrav!
[ petkochb @ 01.12.2009. 20:31 ] @
Ljudi da ne bi otvarao novu temu, mislim da je ovde najbolje pitati (ispravite me ako grsim). Isto imam problem sa razmenom IP adresa. Znam ceo princip ... . Mene sad interesuje, da li moze da se na nekom sajtu okaci neki txt dokument i da se u njega upisuju sve IP adrese pokrenutih servera. Znaci interesuje me samo kako upisivati podatke u neku datoteku (tekstualnu) na sajtu (iskoristio bih malo mesta na ortakovom sajtu) i da li je to uopste moguce (jer ne bi zeleo da neka aplikacija zavisi od toga da li je moj PC ukljucen kako bi preko aplikacije koju sam napravio slao sve ip adrese pokrenutih servera klijentima)?
[ Eurora3D Team @ 02.12.2009. 02:11 ] @
Trazi primere za FTP upload ... mislim da sam i ja o tome pisao negde na VB forumu ...
[ Dacex @ 10.12.2009. 22:59 ] @
Pozdrav svima!

Zatrebalo mi je neki ovakav program da preko interneta sa mog racunara posaljem na neki drugi racunar nasao sam ove primere. Probao sam dole atacovan kod i kada ga ispobam na svom racunaru radi, cim ga posaljem drugu klient program i ubacim njegovu adresu u server program nece da se konektuje na njega, probao sam sa vise kompijutera ali i dalje je proble isti. Zasto dolazi do toga? koliko sam razumeo winsock podrzava komunikaciju preko interneta. Prikacio sam primer servera i klienta.

Hvala unapred!
[ Dacex @ 10.12.2009. 23:03 ] @
Nece da prihvati atac

evo kod:

Server:
Code:
Private Sub Command1_Click()
'povezivanje na IP
    Winsock1.Close 'ovo upises da mozes vise puta pokusati da se konektujes ako ne uspe a da n izbacuje gresku
    Winsock1.RemoteHost = Winsock1.LocalIP 'ovako sam cita moju IP
   
    Winsock1.RemotePort = Text2.Text 'ovaj broj mora biti isti u obe aplikacije
    Winsock1.Connect
End Sub

Private Sub Command2_Click()
'salje podatak
 Winsock1.SendData Text3.Text
End Sub


Private Sub W1_DataArrival(ByVal bytesTotal As Long)
'hvata text i upisuje ga u text3
Dim str As String
Winsock1.GetData str
Text3.Text = str
End Sub

Private Sub Winsock1_Connect()
'obavestava da ste konektovani
MsgBox "Konekcija uspesna!", vbInformation, "Connected"
End Sub


Klijent:

Code:

Private Sub Form_Load()

    Winsock1.Close
    Winsock1.LocalPort = Text2.Text
    Winsock1.Listen

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
' ukoliko se neko konektuje program prihvata pristup
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'prihvata poslati text i upisuje ga u text1
Dim str As String
Winsock1.GetData str
Text1.Text = str


End Sub

Manje vise to je isti kod kao sto je Nevena postavila.
[ Eurora3D Team @ 12.12.2009. 01:35 ] @
Prvo ovaj drugi kod je za server (vidis Winsock1.Listen)
Drugo stavi jos jedan winsock da bi on prihvatio konekciju jer ovako zatvaras winsock koji slusa.
Znaci u
Code:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock2.State <> sckClosed Then Winsock2.Close ' If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock2.Accept requestID ' Winsock1.Accept requestID
End Sub

i
Code:

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock2.GetData str ' Winsock1.GetData str
Text1.Text = str
End Sub

a nece da se poveze kad je na drugom PC-u zato sto
Code:

Private Sub Command1_Click()
    Winsock1.RemoteHost = Winsock1.LocalIP 'ovako sam cita moju IP <<<
End Sub

stavi adresu drugog PC-a (servera)
Mozes da je procitas sa ovog sajta http://checkip.dyndns.org/ (sa server PC-a)



[ Dacex @ 14.12.2009. 00:27 ] @
Hvala ti na odgovoru!

Uradio sam kako ste rekli

kod za server program (u njemu imam 3 polja za unos i i dugme konektuju se i salji )

Code:
Private Sub Command1_Click()
'povezivanje na IP
    Winsock1.Close
    Winsock1.RemoteHost = Text1.Text ' txt polje gde upisujem ip adresu racunara na kome se nalazi klijent program
    Winsock1.RemotePort = Text2.Text ' port mi je u obe aplikacije postavljen na 12345
    Winsock1.Connect
End Sub
Private Sub Command2_Click()
'salje podatak
Winsock1.SendData Text3.Text
End Sub
Private Sub Winsock1_Connect()
'obavestava da ste konektovani
MsgBox "Konekcija uspesna!", vbInformation, "Connected"
End Sub

a kod za klijent (u klijent programu imam text box za prijem podataka i text box za port)
Code:
Private Sub Form_Load()
    Winsock1.Close
    Winsock1.RemotePort = Text2.Text 'text box za port
    Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock2.State <> sckClosed Then Winsock2.Close ' If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock2.Accept requestID ' Winsock1.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock2.GetData str ' Winsock1.GetData str
Text1.Text = str
End Sub


U mom slucaju Server salje podatke a klijent ih samo prima. I opet sam probao sa drugarom i nece da se konektuje.... ne znam gde sam pogresio, pa bih zamolio za jos malo pomoci ako moze.

Hvala unapred!
[ Aleksandar Vasic @ 14.12.2009. 12:03 ] @
Pa reci nam koja ti se greska javlja?

Jesi siguran da ti firewall ne blokira portove?

Mozda moras da forwardujes port?
[ Dacex @ 14.12.2009. 22:29 ] @
Pa ukoliko je sve u redu, program bi trebao da kaze da je konektovan na klijent. A kada ja pokrenem ga i kliknem konekt, nista se ne desava, a kada kliknem da posaljem nesto vb mi zatamni ovaj deo
Code:
Winsock1.SendData Text3.Text
, firewall je isklucen...
[ Aleksandar Vasic @ 14.12.2009. 22:43 ] @
kod klijenta:

Code:
Winsock1.RemotePort = Text2.Text 'text box za port


Zar ne bi trebao da bude

Code:
Winsock1.LocalPort = Text2.Text 'text box za port
[ Eurora3D Team @ 15.12.2009. 00:12 ] @
Ovo sto je napisao @Aleksandar Vasic je tacno.
Opet si u poruci zamenio sta je server a sta je klijent.
Server je uvek onaj koji slusa (ceka zahteve za konekciju) a klijenti su programi koji zapocinju konekciju sa serverom.
Znaci server je ovde kod koji ima Winsock1.Listen i pre te linije treba da odredis port na kom ce da slusa. Za servere to je LocalPort property.
Kod klijenta trebas da podesis IP adresu i port na koje ce pokusati da se konektuje pre nego sto pozoves Connect (RemoteHost i RemotePort). Upisujes serverov IP i port.
Klijent kod ti je dobar.
Isto mozes da zapamtis da se IP adresa 127.0.0.1 koristi kad je server na istom PC-u kao i klijent (localhost)
Tako da isprobavaj sa adresom 127.0.0.1 i nekim portom dok ne napravis da sve radi ok na istom kompu.
Kad to uradis program bi trebalo da radi isto i preko interneta. Nadji koja je javna IP adresa PC-a na kome radi server i unesi je kao server IP u klient program.
Ako tad ne radi znaci da : ili je adresa pogresna, ili nije javna, ili je port blokiran itd. uglavnom tad nije do programa.
Mozes da koristis port 80 ako je slobodan jer on uglavnom nije blokiran.
[ Aleksandar Vasic @ 15.12.2009. 09:19 ] @
Meni se cini da je on hteo da Server salje podatke klijentu/ima, a da Klijent/i samo slusaju i hvataju podatke...
[ Eurora3D Team @ 15.12.2009. 11:50 ] @
Pa svejedno, server je po definiciji onaj koji slusa i u TCP-u on je jedan a klijenata moze da bude vise.
Klijenti su aktivna strana kad se pravi konekcija bez obzira ko ce posle prvi da salje podatke itd. Gleda se po nacinu uspostavljanja veze.
Klasican primer klijent programa je web browser a klasican primer servera je http server.
[ Dacex @ 15.12.2009. 20:36 ] @
Samo da se javim...hvala na odgovorima... da ja sam hteo da server salje podatke, a klijent da ih prima. Probacu ovo sto ste mi dali, pa cu se javiti...sada sam u velikoj guzvi pa nestignem.