Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 20.1.2011, 22:17   #1
clzola
Član
 
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
Određen forumom Server and Client problem

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++;
}
Kasnije cu da pokusam da ovaj klient ubacim u igricu koju radim... (Zato mi ovo treba).Nije toliko veliki prioritet da bas sve shvatim oko Internet programiranja. Zelim samo da zavrsim igru koju sam poceo da radim (imam preveliku zelju da je napravim). Kopirao sam kod servera i clienta iz tutoriala, i samo mijenjam ovo za recv i send, to jeste samo pravim petlje i odredjujem kada sta treba da se salje...

Help ...
clzola je offline   Odgovor sa citatom ove poruke
Stara 21.1.2011, 15:16   #2
mctoxic88
Novi član
 
Član od: 10.5.2007.
Lokacija: Subotica
Poruke: 29
Zahvalnice: 2
Zahvaljeno 6 puta na 3 poruka
Određen forumom Re: Server and Client problem

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
mctoxic88 je offline   Odgovor sa citatom ove poruke
Stara 21.1.2011, 23:52   #3
clzola
Član
 
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
Određen forumom Re: Server and Client problem

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 i sad radi OK... :/
clzola je offline   Odgovor sa citatom ove poruke
Stara 22.1.2011, 15:13   #4
clzola
Član
 
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
Određen forumom Re: Server and Client problem

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 .... :/
clzola je offline   Odgovor sa citatom ove poruke
Stara 23.1.2011, 11:44   #5
Fantastic
Član
 
Član od: 1.4.2010.
Lokacija: Kuca
Poruke: 458
Zahvalnice: 20
Zahvaljeno 37 puta na 33 poruka
Određen forumom Re: Server and Client problem

Citat:
clzola kaže: Pregled poruke
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 .... :/
zavisi od headera
ali pazi ti win headere ne mozes ni u linux
probaj u linuxu koristiti windows.h
znaci da vecina nece moci
Fantastic je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Fantastic na korisnoj poruci:
clzola (23.1.2011)
Stara 25.1.2011, 15:15   #6
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: Server and Client problem

Citat:
clzola kaže: Pregled poruke
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 .... :/
Zavisi koji su headeri u pitanju. Ako su u pitanju headeri koji su u C++ standardu, onda su oni podržani na svim kompajlerima i operativnim sistemima. Ali u tvom slučaju, verovatno koristiš Berkeley sokete, dok na Windowsu moraš da radiš sa Winsockom, tako da ćeš morati kôd da ponovo napišeš za Windows. Moj savet je da napraviš neki abstraction layer tj. interfejs koji koristi Winsock ili neki drugi pristup u zavisnosti od operativnog sistema, ali ti iz tvog kôda pozivaš iste funkcije bez obzira na to koji se sistem koristi (kao wrapper oko socket kôda). I još jedna stvar, ako si slučajno koristio fork() kod server za handlovanje više konekcija, za to nema teoretske šanse u Windowsu bez petljanja sa nekim assembly-level stvarima, što nije ono što bi hteo da radiš, veruj mi
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 25.1.2011, 18:57   #7
clzola
Član
 
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
Određen forumom Re: Server and Client problem

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.
clzola je offline   Odgovor sa citatom ove poruke
Stara 25.1.2011, 23:56   #8
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: Server and Client problem

Citat:
clzola kaže: Pregled poruke
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.
Ako imaš klijent koji radi pod Windowsom, moći će da se konektuje na bilo koju vrstu servera. Serveri rade na socketu, tako da je sasvim nebitno pod kojim operativnim sistemom su (isto kao što ti možeš da pristupiš Apache serveru preko Win-a).

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).
Geomaster je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci:
clzola (26.1.2011)
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
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


Sva vremena su po Griniču +2 h. Sada je 16:46.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2022, vBulletin Solutions, Inc.
Hosted by Beograd.com