[ petkochb @ 11.11.2010. 10:20 ] @
Napravio sam igricu (Tablic koji se igra preko interneta) koja radi na principu Klijent-Server. Koristim TCP protokol. Medjutim ljudi mi se javljaju uvek sa jednim te istim pitanjem - nemogu se konektovati medjusobno, sto znaci da nemogu da igraju. Ja znam da je problem kod portova tj Port Forwarding-a, jer isti problem sam i ja imao kad sam prvi put pokrenuo Server stranu ove igice. Meni nije problem odradio sam port forwarding, medjutim neki ljudi to uopste neznaju da odrade, pa se ja pitam da li je moguce nekako da se ti portovi i na samom ruteru automatski otvore. Problem bi resio i neki program koji to radi. Dugo sam pretrazivao, medjutim nista. Da li bi taj problem bio resen da koristim UDP protokol i ako tako moze molio bih da mi objasnite. Igrica je besplatna i mozete ovde da je nadjete: http://sites.google.com/site/tablicnet/
[ Shadowed @ 11.11.2010. 10:33 ] @
Resenje je i da napravis server koji je stalno online, svi se povezuju na njega i preko njega ide saobracaj.
[ vujkev @ 11.11.2010. 14:08 ] @
Možda bi mogao da otvoriš port koristeći uPNP (ako je isti omogućen). Nije rešenje koje će raditi u svim slučajevima, ali pretpostavljam da će u većini raditi.

http://www.google.com/search?q...:official&client=firefox-a

http://www.knoxscape.com/Upnp/NAT.htm
[ petkochb @ 11.11.2010. 15:16 ] @
Resenje da server bude uvek online znam, ali je to sada nemoguce jer je igrica odavno zavrsena, sto bi znacilo da moram sve ispocetka. Pokusacu sa otvaranjem porta preko uPNP. Jel moze neko objasnjenje sta je to uPNP i kako njega treba omoguciti? Unapred hvala.



PS: Chat koji sam skinuo sa gornjeg linka ne radi kod mene. Server ne moze da otvori port koji mu zadam a koji vec nije otvoren. U 'Log'-u mi ispise sledece: Checking for UPnP NAT router No router, UPnP disabled, or firewall blocking UPnP. Da li mozda na svim ruterima, ili bar na vecini, postoje portovi koji su po default-u otvoreni i da li oni mogu da se koriste?

Hvala svima koji pokusavaju da pomognu

[Ovu poruku je menjao petkochb dana 11.11.2010. u 16:37 GMT+1]
[ vuchko.vuchko @ 11.11.2010. 16:17 ] @
Uh teska tema i ja sam se bavio tim stvarima. Uspio sam igrati igricu tek kad uradim port forward na oba racunara i klijent i server. Moja ideja za rjesenje tog problema bila bi da moja igrica radi na principu torrenta, ali tu je bio mali problem niko nije znao kako to torrent otvara portove :-( http://www.elitesecurity.org/t397543-0
[ petkochb @ 11.11.2010. 18:22 ] @
vucko video sam tvoju temu ni meni nije pomogla . Kod ovakvih aplikacija bitno je samo da server ima otvorene portove a ne i klijent, jer server je taj koji slusa na nekom portu, a klijent se samo 'kaci' na server na tom portu pa oni komuniciraju. ja sam na sajtu moje igrice dao detaljno uputstvo za port forwarding ali sto ti u tvojoj temi kazes nezna bas svako to da uradi. Sve u svemu valjda ce se naci neko resenje. Jedan moj drug je resio ovaj moj problem instalirajuci neki program (ne znam kako se zove) koji spaja kompove u lan mrezu. Ova moja igrica u lanu hoce da radi to nije problem, pa su oni tako igrali, samo umesto ip adrese kucao je localhost kako bi igrali u lanu. Pitacu ga kako se zove program, ali mi to nije bas najbolje resenje.
[ petkochb @ 11.11.2010. 19:24 ] @
Malo sam trazio po netu i nasao sajt za proveru otvorenih portova. Mojoj igrici treba 3 porta 210, 211 i 212. Da li ja mogu da koristim http port 80, ftp port 21 i Telnet port 23, i da li su oni otvoreni po defaultu na svim, odnosno vecini racunara odnosno rutera? Da li ce koriscenje tih portova ugroziti rad nekih drugih programa? Hvala
[ vuchko.vuchko @ 11.11.2010. 19:39 ] @
da nije Hamachi???
[ vujkev @ 11.11.2010. 19:47 ] @
Ni jedan port ne bi trebalo da bude otvoren po defaultu. Inače "korisnički" programi ne bi trebalo da koriste portove ispod 1024

evo koda koji sam ja koristio za otvaranje porta 8080. Mislim da ti je najlakše za početak da korsitiš ovo.

Code:

Private Sub Timer1_Timer()
    Dim x As Long
    Dim bFound8080 As Boolean
    Dim theNatter As NATUPNPLib.UPnPNAT
    Set theNatter = New NATUPNPLib.UPnPNAT

    Dim mappingPorts As NATUPNPLib.IStaticPortMapping

    For Each mappingPorts In theNatter.StaticPortMappingCollection

        If mappingPorts.ExternalPort = 8080 Then bFound8080 = True
        DoEvents
    Next

    If bFound8080 = False Then
        theNatter.StaticPortMappingCollection.Add 8080, "TCP", 80, "192.168.32.3", True, ""
    End If

    Set theNatter = Nothing

End Sub

[ petkochb @ 11.11.2010. 23:46 ] @
Vujkev, hvala na trudu i na odvojenom vremenu. Probao sam tvoj kod, medjutim, javlja mi se greska u sledecem redu: "For Each mappingPorts In theNatter.StaticPortMappingCollection". Kaze error 424 object required. Neznam sta mu to znaci. ubacio sam u projekat NATPUNP library. Jel ovaj kod radi na svim ruterima?

> Kako se skyupe i messanger "probijaju" kroz portove. Znam da oni koriste UDP protokol. Jel i kod UDP protokola moraju biti otvoreni portovi?

Vucho, mislim da jeste Hamachi.
[ vujkev @ 12.11.2010. 07:40 ] @
Davno sam prestao da koristim VB6 i onaj kod je star barem 4 godine :) U principu grešku ne bi trebalo da ti javi bez obzira da li je ruteru omogućen uPNP.
[ vuchko.vuchko @ 12.11.2010. 11:56 ] @
I meni na tom mjestu javlja gresku.... :-(
[ petkochb @ 12.11.2010. 13:52 ] @
Meni nije jasno kako to funkcionisu ostali programi koji se ponasaju kao serveri, npr. Team Viewer i ostali programi za remoote control racunara. Isto tako ne znam kako funkcionisu Messanger, Skype, znam samo da koriste UDP protokol. Jel bi to pomoglo? Da li se kod UDP protokola komunikacija obavlja na isti nacin kao i kod TPC? Nalazim raznorazne kodove i primere po netu za PF ali kod mene nista neradi. Opet napominjem da meni nije problem da ja sebi uradim PF (vec sam ga radio), ali zbog ostalih potencijalnih korisnika ove moje aplikacije mi je to bitno, jer dosta ljudi kada im ne uspe da se povezu misli da je nesto do mog programa, da on ne radi. Niko nezna da on savrseno radi a da je problem samo do PF kod ljudi koji koriste Rutere.
[ Shadowed @ 12.11.2010. 14:26 ] @
MSN/Live Messenger mislim da koristi TCP. On ima centralni server. Direktna komunikacija se odvija samo prilikom slanja fajlova a mislim da i tada, ukoliko to nije moguce, bude uradjeno preko centralnog servera.
Skype mislim da radi slicno P2P mrezama tj. postoji veci broj node-ova koji sluze kao "prenosioci".
Generalno, ako neki program ocekuje dolaznu konkeciju na nekom portu i u NAT-u je, neophodno je da port bude forward-ovan.
[ vuchko.vuchko @ 12.11.2010. 15:12 ] @
E al' kako omoguciti odnosno forwardovati taj neki port iz programa jer i skipe i torrent i sl. programi to urade prilikom instalacije i ne zahtijevaju rucni PF ?
[ Shadowed @ 12.11.2010. 16:04 ] @
Ne urade. Mogu eventualno da otvore na tvom firewall-u ali ne mogu na ruteru to da urade. Na razlicitim ruterima je razlicit postupak, morao bi sve da ih pokrijes a i tada ne bi bio siguran.
[ Blue82 @ 12.11.2010. 19:53 ] @
Ni skype ne radi to tako kako si ti zamislio. Skype ima proveru da li si ti sakriven iza rutera. Ako nisi sakriven on salje poruku nekom od centralnih servera da si ti pogodan za prenos. Onda ako neko drugi pokusava da uspostavi kontakt sa nekim a on je iza rutara citava komunikacija se odigrava preko tebe, tj ti si u ulozi servera(ili neko drugi od ljudi koji trenutno nisu iza rutera). A ako ne moze da se pronadje takav pogodan korisnik onda poziv preuzima sam centralni racunar itd itd. Ovo je uprosteno ali to je neki grubi princip rada. To sto ti zelis ne postoji.
[ petkochb @ 28.01.2011. 17:24 ] @
Ljudi ne znam da li sam u pravu ali mislim da sam resio problem koriscenjem UDP protokola. Najme, zatvorio sam sve portove na ruteru (ponistio sam port forwarding) i napravio jednu malu aplikaciju za chat. Aplikacija se sastoji iz dva dela koje sam ja nazvao server i klijent. Naravno poruke se bez problema razmenjuju. Ako neko zna da malo bolje pojasni ovo "cudo".

Evo i koda:
Server strana:
Code:
 With Winsock1
        .LocalPort = 61000
        .RemotePort = 60000
        .RemoteHost = "255.255.255.255"
        .SendData ""
End With
End Sub

Private Sub Command2_Click()
Winsock1.SendData StrConv(Text1.Text, vbUnicode)
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData podatak
Text2.Text = podatak
End Sub 


Klijent strana:
Code:
 Private Sub Command1_Click()
Winsock1.SendData StrConv(Text2.Text, vbUnicode)
End Sub

Private Sub Form_Load()
With Winsock1
        .LocalPort = 60000
        .RemotePort = 61000
        .SendData ""
End With
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData podatak
Text1.Text = podatak
End Sub