![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#1 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
![]()
Jezik C/C++. Linux Ubuntu 10.10
Pokusavam da napravim Server i Client. Na jedan server se mogu konektovati najvise 4 klienta. E sad, uspijem da napravim Server koji ce da primi nick od svakog klienta i zatim svakom klientu da posalje te nikove. Medjutim nailazim na problem kada treba da ova 4 clienta medjusobno komuniciraju. Server: http://paste2.org/p/1202641 Client: http://paste2.org/p/1202642 Kada upalim server povezem ova 4 klienta na server i kada treba da se razmeni poruka izmedju klienata desi se sledece 1. Client -posalje poruku OK! - primi poruku OK! - primi poruku OK - error in recv (kada treba da primi od 4 klienta) 2. Client - posalje poruku OK! - primi poruku OK - primi poruku OK - primi poruku OK - greska u primanju poruke recv 3. Client - posalje OK - primi OK - primi OK - primi OK - Exit OK 4. Client isto kao treci ://// Sad ne kapiram gdje grijesim sa kodom... napravio sam u clientu while perlju kod koje ako je tvoj Index onda salji, ako nije onda primas, a svoj index dobijas kada se konektujes na server Kod:
/* Index je na pocetku 1, znaci da je na redu client 1. Client 1 provjerava da li je njegov Index jednak trenutnom Indexu i onda u odnosu na to salje. Drugi klient provjerava da li je njegov Index jednak jedinici, kako se drugi klient povezao kao 2. na server on je dobio index 2 i smjesten je u variablu yourIndex prema tome on ce da ceka poruku koja ce biti poslata od client 1. I sada kada primi poruku client 2, opet provjerava Index == yourIndex, kako se Index uvecao za jedan on isnozi 2 i sada Client2 salje poruku... Tako i ostali clienti */ while(Index < 5) // da predje sva 4 klienta { if(Index == yourIndex) { send(); } else { recv(); } Index++; } Help ... |
![]() |
![]() |
![]() |
#2 |
Novi član
Član od: 10.5.2007.
Lokacija: Subotica
Poruke: 29
Zahvalnice: 2
Zahvaljeno 6 puta na 3 poruka
|
![]()
Pff, hm, trebao si mozda ovo da odradis u C++ preko klasa i automata. Jer bi onda mogao da definises stanja u koje ulaze klijenti pri pristupanju serveru
![]() |
![]() |
![]() |
![]() |
#3 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
![]()
Ubacio sam prije ove while petlje scanf funkciju kojom upisem sta treba da se posalje ostalim klientima.
I posto sam to uradio, nekim cudom je ovo proradilo ![]() |
![]() |
![]() |
![]() |
#4 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
![]()
Da ne otvaram novu temu....
Programiram na Linuxu i pravim jednu igricu. Igrica treba da radi preko neta, tako da koristim header fajlove za sokete i povezivanja itd itd... Sad da li mogu iste te hedere da koristim i u Windows-u, da ne bih pisao posebno za windows sa winsockom .... :/ |
![]() |
![]() |
![]() |
#5 | |
Član
Član od: 1.4.2010.
Lokacija: Kuca
Poruke: 458
Zahvalnice: 20
Zahvaljeno 37 puta na 33 poruka
|
![]() Citat:
ali pazi ti win headere ne mozes ni u linux probaj u linuxu koristiti windows.h znaci da vecina nece moci |
|
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku Fantastic na korisnoj poruci: | ||
clzola (23.1.2011) |
![]() |
#6 | |
V.I.P. Programiranje
|
![]() Citat:
![]() |
|
![]() |
![]() |
![]() |
#7 |
Član
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
|
![]()
Nisam koristio fork u serveru... al hvala na odgovorima, mislim predpostavljao sam da nece moci par header-a ali eto cisto da pitam...
Igricu sam odradio na Linux, Klijent i Server i trenutno rade samo na mom kompu... Videcu dalje da probam da prosirim da moze u LAN pa u internet, a sto se tice Windows-a, snaci cu se nekako, mislim da se inicijalizacija i setup razlikuje dok je slanje i primanje isto (send() & recv()). Pitanje: Da li moze da se server upali na Linuxu, da se jedan od klijenta poveze sa Linux sistema a drugi klijenti da se povezu sa Windows sistema... ? SS Igre: http://img231.imageshack.us/f/screenshot2ipr.png/ Jedina je mana sto recv() komanda blokuju igricu, to jeste kada je vrijeme da klijent primi koordinate od drugog klijenta, ne moze se stisnuti Exit dugme ili Close dugme u titlebar-u. |
![]() |
![]() |
![]() |
#8 | |
V.I.P. Programiranje
|
![]() Citat:
Davno sam radio sa socketima u Win-u, ali koliko se sećam socket je kao random-access fajl sa kog možeš da čitaš i u koji možeš da pišeš. To što recv blokuje igru može da se reši samo multithreadingom, ali onda moraš da paziš na sinhronizaciju. Meni je u mom frameworku trebalo dve neprospavane noći da sredim sve mutexe među 50+ različitih objekta od kojih svako može da spawnuje thread i accessuje neki drugi objekat... Kod tebe je to nešto manjih razmera, tj. jedan thread bi radio message pump i rendao u framebuffer a drugi se bavio logikom i send&receive (ako hoćeš, može da bude i jedan za sâmu logiku a jedan za komunikaciju, u suštini kako ti odgovara). |
|
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
clzola (26.1.2011) |
![]() |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
![]() |
||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Battlefield: Bad Company 2 | masteri | Akcione igre | 8994 | 8.2.2020 12:10 |
CS 1.6 plugin, problem | ANGELDEAD | Programiranje | 6 | 8.11.2010 14:18 |
wine problem | VoodooVlada | Slobodni softver | 1 | 20.7.2010 0:09 |
Java Rmi Server, client | optimus_prime | Programiranje | 1 | 6.1.2010 22:42 |
CS 1.6 Server problem! | KNB|*B!RJ4N*| | Mrežne igre | 2 | 12.2.2009 0:24 |