Wysyłanie danych serwer - klienci

0

Z tematu sieci w jestem troszkę zielony więc proszę o pomoc.
Jak najlepiej rozwiązać problem napisania czegoś na wzór chata?
Za cel nie stawiam sobie stworzenia narzędzia do "komunikacji tekstowej", a gry sieciowej (chat podaję więc jako przykład który ma za zadanie naświetlić mój problem).

W transmisji tej bardzo zależy mi na szybkości oraz dokładności w wysyłaniu bitów / danych (więc pewnie protokół UDP odpada?). Proszę o pomoc.

0

Pytanie, które powinieneś sobie postawić to: Jak dużo danych i jak często będziesz wysyłał?

Zadaniem serwera jest odpowiadanie na prośby. Przykład wymiany zdań:
K: Chcę się zalogować z loginem XXX i hasłem YYY
S: Hasło prawidłowe

K: Wyślij mi mapę
S: ... <w dowolny sposób zapisana mapa>

K: Chciałbym poruszyć się tutaj <x,y>
S: OK

K: Co się wydarzyło
S: ... <lista zdarzeń z czasami>

...

Chodzi generalnie o to, żeby to był dialog - taki kod najłatwiej się analizuje ORAZ klient prosi tylko o te dane które potrzebuje, a resztę jest w stanie sam obliczyć.

0

Jeśli chodzi o częstotliwość wysyłanych danych to będzie ona bardzo wysoka, ale będzie to niewielka porcja bitów.

Pomysł jest mniej więcej taki:
Jest aplikacja która na formie ma jakieś tam przyciski. Po włączeniu dajmy na to button1 (u siebie) ta informacja musi zostać przesłana jakoś do innych ludzi (ze mną połączonych) i u nich ma też wykonać się akcja z przycisku button1. Tak samo jeśli jakiś ktoś przyciśnie np. button3 to to też musi pójść w świat dla innych i u każdego połączonego ten przycisk musi się uruchomić.

Zależy mi tu bardzo na prędkości oraz dokładności w wysyłaniu tych danych. Na pewno takie coś jest możliwe bo w końcu w takim np. Couter Strike więcej rzeczy jest wysyłanych i odbieranych a wszystko to działa bardzo szybko.

Mam nadzieję ze jasno to wytłumaczyłem.

1

po pierwsze wysłanie 1000 razy po 1 bajcie będzie dużo wolniejsze niż wysłanie 1 raz 1000 bajtów. Zobacz sobie jak wygląda ramka TCP. Sam nagłówek ma min. 16 bajtów więc jak wysyłasz 1000 razy po 1 bajcie tak naprawdę wysyłasz 1000 * (16 + 1) czyli 17.000 bajtów. Jeśli wysyłasz 1 raz 1000 bajtów tak naprawdę wysyłasz 1 * (1000 + (16 * (1000/536 => 2)) czyli 1.032 bajtów. 536 to domyślny maksymalny rozmiar danych w jednej ramce. Jeśli mamy 1000 bajtów a max w jednej ramce może być 536 to zostaną wysłane co najmniej dwie ramki. To tak trochę teorii abyś zrozumiał, że wysyłanie małych paczek nie zawsze jest dobre.

A teraz co do konkretów to bez kodu i Twojego "testu szybkości" (dlaczego uważasz, że jest za wolno) wątpię aby ktokolwiek powiedział coś sensownego

0

OK w takim razie chciałbym spróbować stworzyć kod, ale tym razem na Synapse zamiast INDY (po co skoro na tym badziewiu i tak to nie działa tak jak ja chce). Komponenty (Synapse) bardzo szybkie poza tym, że dla kogoś kto do tej pory używał tylko INDY bardzo nie intuicyjne w użyciu.

Jak np. odbierać dane skoro tam nie ma czegoś takiego jak zdarzenia OnRecBuff (czy coś w tym stylu). Znalazłem na googlach takiego gotowaca:
http://stackoverflow.com/questions/1254578/synapse-cannot-receive-data-from-socket
ale to nie działa mi w ogóle.

Mógł by ktoś zapodać jakimś przykładem na łączenie się serwera z klientem / klientami w synapse?

0

przypomnij się koło południa to wrzucę przykładowy kod bo już mi się nie chce dzisiaj :p

tutaj http://www.speedyshare.com/files/30946909/Simple_MultiChat.rar masz przykład jak można się komunikować po tcp z użyciem synapse

0

Teraz gdy miałem chwilę czasu zabrałem się za ten program.
Wydaję mi się (aczkolwiek jeśli się mylę to proszę mnie poprawić), że przesyłanie danych przez sockety jest zbyt wolne dla mojego programu. W mojej domowej sieci wysłanie danych z jednego komputera na drugi powoduję znaczące opóźnienia w mojej grze.

A teraz co do konkretów to bez kodu i Twojego "testu szybkości" (dlaczego uważasz, że jest za wolno) wątpię aby ktokolwiek powiedział coś sensownego

Wysyłam więc w tym linku:
http://www.speedyshare.com/file/Hn39d/Simple-MultiChat.7z
zarys tego jak aplikacja ta miała by wyglądać
(biblioteki midi mogę podesłać, jak ktoś jest tym zainteresowany)

Po przetestowaniu widać wyraźnie, że szybsze wciśnięcie klawiszy jest zbyt wolno odwzorowywane na sąsiednim komputerze. Mimo to dziękuje jeszcze raz zainteresowanie tematem i proszę o jakieś wskazówki np. co robię źle.

0

jak dla mnie działa bez zauważalnego gołym okiem opóźnienia. Sieć lokalna, jeden komp karta 1Gb na płycie -> swich 100Mb -> AP 54Mb -> laptop wifi wbudowana. Jedyny szkopuł w tym, że wywala klienta po np. włączeniu perkusji czy zmianie instrumentu

0

Tak to będę musiał jeszcze te błędy ze zmianami instrumentów poprawić, to wiem.
Trochę mnie to zdziwiło co napisałeś, bo u mnie dwa lapki połączone po kablu (z kartami chyba gigowymi) i były opóźnienia przy szybszych dźwiękach. O moim nędznym wifi już moim nie wspominam, bo musiałem je ze standardu wifi 802.11 n do 802.11 b zredukować (choć szybkość transmisji była podobna jak na kablu.)

Czy np u Ciebie Misiekd da się bez opóźnienia wygrać tak około 4 dźwięków na sekundę?

Korzystając z niezabezpieczonej sieci wifi mojego sąsiada chciałem zrobić połączenie przez internet, ale nie wiem czemu program nie widzi serwera. Port Tcp przekierowany na routerze, firewall wyłączony. Będę musiał jeszcze z tym powalczyć bo jestem dość zdeterminowany.

0
Piotruch88 napisał(a)

Czy np u Ciebie Misiekd da się bez opóźnienia wygrać tak około 4 dźwięków na sekundę?
napiszę tak - jak przycisnę na jednym to na drugim gra praktycznie od razu, nie widać jakiegoś opóźnienia czy czegoś podobnego. Inna sprawa, że jak naciskam szybko to klient, który ma powtarzać po prostu się gubi. odpal sobie na tej samej maszynie co klient, który odbiera i gra np. telneta telnet adres_serwera 12345 i zobacz, że wiadomości do niego przychodzą wszystkie a grane nie wszystkie

albo wyświetlaj sobie przyjście każdej wiadomości w okienku chatu razem z godziną (z milisekundami) to zobaczysz co przychodzi a co jest grane

0

Trochę mnie to zdziwiło co napisałeś, bo u mnie dwa lapki połączone po kablu (z kartami chyba gigowymi) i były opóźnienia przy szybszych dźwiękach.

'Coś opóźnia' np. router, albo jakiś antywirus czy coś innego. Przez internet nie da się szybciej niż przez internet. Tego nie unikniesz.

Korzystając z niezabezpieczonej sieci wifi mojego sąsiada chciałem zrobić połączenie przez internet, ale nie wiem czemu program nie widzi serwera. Port Tcp przekierowany na routerze, firewall wyłączony. Będę musiał jeszcze z tym powalczyć bo jestem dość zdeterminowany.

Tak, atakuj sieć sąsiada. to jest najlepszy sposób na testowanie opóźnienia. Ja bym raczej strzelił jakieś darmowe proxy bo chociaż byś nie miał kłopotów z legalnością.

Ażeby przyśpieszyć prędkość połaczenia robi to się tak w FPSach itd.:
1.Zbieramy dane i liczymy sobie ms
2.Co ileś ms wysyłamy zgromadzone dane
3.Co te ileś ms odbieramy także dostarczone dane i się do nich stosujemy.
4.Jeżeli nie otrzymujemy danych to próbujemy symulować zachowanie obiektów ruchomych (np. ciągle je przemieszczamy tak jak się wcześniej przemieszczały).

poza tym, mi się wydaje, że kolego masz niesamowite wyobrażenie o prędkości połączenia. Generalnie w połaczeniu ważniejsze niż czas z A do B jest istotniejsza jest niezmienność tego czasu oraz w miarę spora przepustowość (czyli nie zapchamy się).

0
Misiekd napisał(a)
Piotruch88 napisał(a)

Czy np u Ciebie Misiekd da się bez opóźnienia wygrać tak około 4 dźwięków na sekundę?
napiszę tak - jak przycisnę na jednym to na drugim gra praktycznie od razu, nie widać jakiegoś opóźnienia czy czegoś podobnego. Inna sprawa, że jak naciskam szybko to klient, który ma powtarzać po prostu się gubi. odpal sobie na tej samej maszynie co klient, który odbiera i gra np. telneta telnet adres_serwera 12345 i zobacz, że wiadomości do niego przychodzą wszystkie a grane nie wszystkie

albo wyświetlaj sobie przyjście każdej wiadomości w okienku chatu razem z godziną (z milisekundami) to zobaczysz co przychodzi a co jest grane

Próbowałem zmierzyć opóźnienia w milisekundach na dwóch kompach, ale okazało się, że to troszkę trudniejsze niż przypuszczałem. Synchronizowanie zegara windowsowego z internetowym serwerem czasu na dwóch komputerach nie daję zamierzonego efektu. Dokładność na poziomie sekund nie jest zachowana, więc nie ma co marzyć o milisekundach.
Ktoś może powiedzieć: "to pobieraj sobie czas z neta" - tak, ale to też troszkę będzie trwało zanim program sobie ściągnie czas i dam sobie głowę uciąć, że na poziomie milisekundowym mija się to z celem. Ale mniejsza o mierzenie czasu.

Wszystkie wiadomości dochodzą, to prawda, ale są one zbyt wolno dostarczane, dlatego też program "gubi dźwięki". Zagranie dźwięku to wykonanie dwóch komend które umownie nazwie "klawisz midi doł" i "klawisz midi góra". Z tego względu, że musi się to odbywać poprzez te dwie komendy to dochodzi do zguby dźwięków ponieważ, wydaje mi się, że te komendy "się ze sobą krzyżują" (zbyt duże opóźnienia w transmisji). Zjawisko to nie występuje z wiadomych przyczyn na uruchomieniu serwera i dwóch klientów na localhost. Na początku tego tematu zjechałem indy, ale muszę przyznać, że na razie efekt z synapse jest taki sam (chodź mimo to moje poprzednie doświadczenia pokazują, że ogółem synapse to bardziej wydajniejsze narzędzie).
Nie rozumiem tego, że w grach takich jak np. Couter Strike przesyłane jest o wiele więcej danych niż stringi, i tam zachowane są dla ludzkich (przynajmniej moich) zmysłów niezauważalne odstępy. Ja mam przesłać tylko tekst i są tak duże opóźnienia. Może ten protokół się nie nadaje i lepiej by to zrobić na UDP? Co o tym sądzicie?

0

Nie rozumiem tego, że w grach takich jak np. Couter Strike przesyłane jest o wiele więcej danych niż stringi, i tam zachowane są dla ludzkich (przynajmniej moich) zmysłów niezauważalne odstępy. Ja mam przesłać tylko tekst i są tak duże opóźnienia. Może ten protokół się nie nadaje i lepiej by to zrobić na UDP?

No jasne, w końcu chcesz mieć efekt jak w CS, który działa na TCP (nie bez powodu) i dlatego użyć protokołu UDP. Pomysłowe, bardzo mnie interesuje jak wpadłeś na coś takiego.
Mi się wydaje że twoje problemy wynikają z:
1.nie wiadomo jakich wyobrażeń o internecie
2.Nieznajomości sposobu działania internetu
3.Miernych umiejętności kodzenia (lub optymilizacji kodu).

Kolego, podałem ci już receptę jak to się robi w zastosowaniach wymagających szybkości. Z czym masz jeszcze problem?
Ja wiem że ty chcesz osiągnąć ping na poziomie 0,000001ns ale niestety, to nie jest możliwe.

A i mały PS: Skoro piszesz tylko z miskiemd, to czemu nie przejdziecie na PRIV? Mnie to osobiście troche denerwuje, gdy na publicznym forum, gada dwóch gości, którzy odnoszą się do siebie i mają serdecznie gdzieś innych.

0

a ktoś ci tu kazał pisać? płacą ci za czytanie?

0

Tak jak myślałem niepopularne poglądy :-/ .

a ktoś ci tu kazał pisać? płacą ci za czytanie?

Nie nikt. Ale wolę upomnieć. Nie mogę? No właśnie. Więc jaki masz problem?

To Ciebie najbardziej boli "internetowy frustracie", że nikt nie zwraca uwagi na twoje głupie zaczepki oraz na pozostałą treść która jest praktycznie bezwartościowa w tym temacie?

Bezwartościowa bo?
Nie jestem żadnym internetowym frustratem. I to nie są głupie zaczepki.

Jak Ciebie denerwuje, że w tym temacie udziela się głownie ja i miskiemd to nikt Ci nie każe tu zaglądać.

Nie w tym leży problem. Problem leży w twoich zwrotach typu Pomóż misiekd. Tylko w tym. Nie czepiam się do tego że generalnie tylko wy się wypowiadacie, może nikt inny nie ma po prostu nic do powiedzenia (poza mną). No i jeszcze troche mnie irytuje to, że ignorujesz moje odpowiedzi, tylko dlatego że nie jestem potulny i milutki. Bo w mojej opinii masz nieskonkretyzowany problem i zamiast po prostu pobadać rzeczy, ciągle piszesz różne nieprzydatne informacje.

Temat nie jest zamknięty więc, czym więcej osób mi coś doradzi tym bardziej będę wdzięczny im oraz twórcą tego forum.

No właśnie to usiłuje zrobić: Pomóc ci. Problem jednak leży w sporej części w tym, że ciągle pytasz, zamiast po prostu zakodzić coś. Podałem pseudo-algorytm na napisanie szybkiej komunikacji przez internet, a czy zaimplemenowałeś ją? Zignorowałeś.

Pozwij mnie do sądu, za to, że mój sąsiad udostępnij mi za free swoje wi-fi

No z całą pewnością pozwolił. Nie mam powodów by tak uważać. A może i tak zrobił. Tylko małe pytanie: Skąd miałem to wiedzieć? Niestety, jeszcze nie umiem czytać myśli innych.

młody inteligentny wykształcony człowieku z dużego miasta.

To akurat jest chyba zbędne? No chyba że masz jakiś ukryty cel.

0

Wydaję mi się, że nie pobrałeś tego pliku z tym multichatem który przerobiłem od misiked-a dlatego też nie bardzo wiem czy Ty wiesz o czym mowa.
Jeśli nie pobrałeś to jak pobierzesz to tam zauważysz, że jest taka klawiatura dźwięków midi. Chciałbym, aby po zagraniu danego dźwięku na jednym kompie został on odtworzony u innych.

1.Zbieramy dane i liczymy sobie ms
2.Co ileś ms wysyłamy zgromadzone dane
3.Co te ileś ms odbieramy także dostarczone dane i się do nich stosujemy.
4.Jeżeli nie otrzymujemy danych to próbujemy symulować zachowanie obiektów ruchomych (np. ciągle je przemieszczamy tak jak się wcześniej przemieszczały).

Jeśli dobrze zrozumiałem to Twój pomysł polega na tym, że
zamiast puszczać od razu po zagraniu w świat informację o tym, że został nagrany jakiś dźwięk,
mam zbierać informacje o wygranych dźwiękach, co jakiś interwał czasowy po czym grupowo te informacje wysłać? Dobrze to zrozumiałem? Pamiętaj, że zależy mi bardzo na prędkości.

PS: CS też używa portów UDP chociaż nie wiem w co nimi przesyła.

0

Wydaję mi się, że nie pobrałeś tego pliku z tym multichatem który przerobiłem od misiked-a dlatego też nie bardzo wiem czy Ty wiesz o czym mowa.
Jeśli nie pobrałeś to jak pobierzesz to tam zauważysz, że jest taka klawiatura dźwięków midi. Chciałbym, aby po zagraniu danego dźwięku na jednym kompie został on odtworzony u innych.

Nie pobrałem ale po przeczytaniu waszych postów nie trudno było to wywnioskować.

Jeśli dobrze zrozumiałem to Twój pomysł polega na tym, że
zamiast puszczać od razu po zagraniu w świat informację o tym, że został nagrany jakiś dźwięk,
mam zbierać informacje o wygranych dźwiękach, co jakiś interwał czasowy po czym grupowo te informacje wysłać? Dobrze to zrozumiałem? Pamiętaj, że zależy mi bardzo na prędkości.

Tak, i to ma być mały odstęp czasowy oczywiście, np. 60x na sekundę. I nie dopuść do dzielenia pakietów (=zachowaj je w miare małe, jeżeli jest bardzo dużo do wysłania to może wyślij resztę w następnym takcie).
Nie rozumiem twojego ekstremalnego podejścia do prędkości. Przecież wiadomo że nie ma to się ślimaczyć, ale to nie będzie tak że puścisz na jednym i Od razu na drugim usłyszysz. Tak nie ma być. Pamiętaj że internet nie polega na jak najszybszej transmisji danych, raczej na tym żeby te dane dotarły tam gdzie mają. Więc jeżeli odpalisz jakąś grę na dwóch PC i ruszysz się jedną postacią to na drugim zobaczysz to z małym opóźnieniem. W przypadku dźwięków różnica może się wydawać jeszcze większa. I nic na to nie poradzisz. Ale internet słuszy do transmisji danych na znaczną odległość, więc dla innej osoby wszystko będzie wyglądało ok, bo nie będą wiedziały kiedy tak naprawdę nacisnełeś guzik. Rozumiesz? I tego nie unikniesz. Bo to nie leży w twojej sprawie, a zależy od wszystkich hostów pośrednich.
I nie ma co płakać nad tym, tak jest i już. Jakoś do FPSów wystarczyło więc nie rozumiem dlaczego ma dla ciebie nie wystarczyć. Nie ma co się nadmiernie roztkliwiać nad prędkością, bo generalnie niewiele da się zrobić żeby to przyśpieszyć. Więc porywasz się z motyką na słońce.No chyba że kod jest skopany bardzo, w co śmiem wątpić.

PS: CS też używa portów UDP chociaż nie wiem w co nimi przesyła.

Interesowałem się jakiś czas temu czego używa Quake 2, i UDP używa do pytania serwera o ilość graczy mapę itd. do połaczenia używa od początku TCP. Zapewne CS nic lepszego nie wymyślił.

0
Piotruch88 napisał(a)

Jeśli dobrze zrozumiałem to Twój pomysł polega na tym, że
zamiast puszczać od razu po zagraniu w świat informację o tym, że został nagrany jakiś dźwięk,
mam zbierać informacje o wygranych dźwiękach, co jakiś interwał czasowy po czym grupowo te informacje wysłać? Dobrze to zrozumiałem? Pamiętaj, że zależy mi bardzo na prędkości.

zastanow sie... moim zdaniem powinienes w tym momencie rzucic w kąt szybkość.
chyba głównie chodzi o to żebyś mógł cos grać na kompie, a żeby u tej drugiej osoby nie było fałszowane, czyli odstępy pomiędzy dźwiękami MUSZĄ byc takie jak u Ciebie. w tym momencie powinieneś to zrobić tak jak "Oho" napisał.
Przecież nie każdy pakiet bedzie leciał tyle samo czasu.

Moim zdaniem powinieneś zapamietywac dzwieki nawet przez 3 sekundy i dopiero potem wysylac taka "paczke".
Nawet jeżeli paczka dojdzie ulamek sekundy pozniej to bedziesz mial "zafałszowanie" maximum raz na 3 sekundy.
Jeśli każdy dzwiek bedzie wysylany jako osobny pakiet to w efekcie mozesz miec piekna melodie po stronie klienta, a po stronie serwera tragedie.

0

Ja dlatego tak nalegałem na tę prędkość wysłania ponieważ wiem, grając z kumplami we wcześniej wspomnianego CS-a, że tam czasem nawet najbardziej drobne różnice czasowe w refleksie powodują stracenia fraga (szczególnie widać to podczas wymian ze snajpery awp). Skoro w tej grze jest to możliwe to dlaczego w moim prostym programie by tego nie zrobić.

Myślę, że opóźnienie 3 sekundowe mijają się z celem ponieważ w graniu na tej wirtualnej klawiaturze mają uczestniczyć wszyscy klienci tworząc jakąś tam układ melodyczny. 3 sekundy w tym wypadku to bardzo dużo. Jeśli natomiast zrobić tak jak pisał Oho, czyli zbieranie po 60x na sekundę i wysłanie, to strzelam, że to by wystarczyło.

Jeszcze pytanie takie mam. Mogę zrobić te odmierzenie nastawiając komponent Timer na jakieś 17 milisekund czy lepiej to do jakiegoś wątku zapuścić?

0
Piotruch88 napisał(a)

Myślę, że opóźnienie 3 sekundowe mijają się z celem ponieważ w graniu na tej wirtualnej klawiaturze mają uczestniczyć wszyscy klienci tworząc jakąś tam układ melodyczny. 3 sekundy w tym wypadku to bardzo dużo. Jeśli natomiast zrobić tak jak pisał Oho, czyli zbieranie po 60x na sekundę i wysłanie, to strzelam, że to by wystarczyło.

a klienci, w trakcie grania maja slyszec innych czy tylko siebie?
bo jesli tylko siebie, a "całość" ma byc slyszana tylko na serwerze to nie widze problemu w tym 3sek opuznieniu. jeszcze lepiej.
jesli jeden klient bedzie mial szybsze lacze a drugi wolniejsze to pojawi sie problem.
moim zdaniem powinienes sie z tym jeszcze "przespac".

0

Ja chciałbym tak, żeby wszyscy słyszeli siebie nawzajem. W takim razie mam ten problem próbować rozwiązać tak jak pisał Oho, czy to się nie da tego tak ugryźć?

0

Jeszcze pytanie takie mam. Mogę zrobić te odmierzenie nastawiając komponent Timer na jakieś 17 milisekund czy lepiej to do jakiegoś wątku zapuścić?

Timery są znane z tego że są bardzo niedokładne.
Z kolei przy wątku może być problem z synchronizacją tak częstą.
Jak pisałem swojego bota do IRC to napisałem mu wysyłanie i odbieranie w wątku i nie zmieniło to właściwie niczego.
Ja bym to zrobił w taki sposób że z głównego kodu gry bym wywoływał sobie renderowanie, inputa, i właśnie kod sieciowy co jakiś czas, a potem oddzielnie Application.ProcessMessages;. Tak chyba byłoby najbezpieczniej. Można zawsze do tego dorzucić jakieś lepsze metody poboru czasu.

Wysyłanie co 3 sekundy spowoduje to że będą się grały dźwięki z 3 ostatnich sekund naraz, na dodatek co 3 sekundy... Bez sensu. Zagraj sobie w CS przy cl_cmdrate=0.3 i cl_updaterate=0.3 Zobaczysz co to znaczy wysyłać co 3 sekundy.

jesli jeden klient bedzie mial szybsze lacze a drugi wolniejsze to pojawi sie problem.

A to dlaczego niby? Bo mniejszy ping w jedną niż w drugą? Nie rozumiem...

0

(jakiś dobry mod może złączy)

Ja chciałbym tak, żeby wszyscy słyszeli siebie nawzajem. W takim razie mam ten problem próbować rozwiązać tak jak pisał Oho, czy to się nie da tego tak ugryźć?

A to czemu miałoby się nie dać. Nie będzie to idealnie zsynchronizowane ale będą to małe progi.

cimak moim zdaniem pierniczy głupoty.

0

Ja bym to zrobił w taki sposób że z głównego kodu gry bym wywoływał sobie renderowanie, inputa, i właśnie kod sieciowy co jakiś czas, a potem oddzielnie Application.ProcessMessages;

Z tego wszystkiego to wiem tylko co to jest

Application.ProcessMessages;

reszta zdanie to troszkę dla mnie jak by po chińsku :) Możesz trochę to jaśniej przedstawić?

0
Piotruch88 napisał(a)

Ja chciałbym tak, żeby wszyscy słyszeli siebie nawzajem. W takim razie mam ten problem próbować rozwiązać tak jak pisał Oho, czy to się nie da tego tak ugryźć?
no to problem o ile w ogole mozliwe zeby klika osob na raz tak zsynchronizowac.

Oho napisał(a)

Ja bym to zrobił w taki sposób że z głównego kodu gry bym wywoływał sobie renderowanie, inputa, i właśnie kod sieciowy co jakiś czas, a potem oddzielnie Application.ProcessMessages;. Tak chyba byłoby najbezpieczniej. Można zawsze do tego dorzucić jakieś lepsze metody poboru czasu.
ke? renderowanie w glownym watku gry, application.processmessages...? cos mieszasz chyba.

Wysyłanie co 3 sekundy spowoduje to że będą się grały dźwięki z 3 ostatnich sekund naraz, na dodatek co 3 sekundy... Bez sensu.
nie zrozumales chyba. "nagryasz wciskane klawisze" i co 3 sek takie "nagrania" wysylasz. a odtwarzanie jest na serwerze.
chociaz jesli Piotruch88 chce zeby wszyscy wszystkich slyszeli to takie rozwiazanie odpada.

0

OK w takim razie co to jest te renderowanie, i czy uda mi się rozwiązać mój problem dzięki temu?
Przypomnę, że problem jest taki:

Chcę, żeby wszyscy gracze podłączeni do jakiegoś wspólnego serwera mogli sobie grać (słysząc siebie nawzajem) na wirtualnym "pianinie" dźwięków midi.

0

K w takim razie co to jest te renderowanie, i czy uda mi się rozwiązać mój problem dzięki temu?
Przypomnę, że problem jest taki:

Chcę, żeby wszyscy gracze podłączeni do jakiegoś wspólnego serwera mogli sobie grać (słysząc siebie nawzajem) na wirtualnym "pianinie" dźwięków midi.

Dobra, zobacz sobie w google co to renderowanie po czym stwierdź że ciebie to nie dotyczy.

Przypomnę że problem jest taki:

Oznaczyłeś jeden z postów jako taki który rozwiązał problem. Więc nie ma już problemu. Widać że nie umiesz się posługiwać forum.

Kurcze, zamiast pierniczyć, może byś wreszcie coś ZAPROGRAMOWAŁ?
Ja mówię i mówię jak masz to zrobić. A ty ciągle zadajesz pytanie od nowa. Ja ci już odpowiedziałem. Więc przestan mnie pytać co to jest cośtam i po prostu napisz ten kod. Bo ty ciągle piszesz jakbyś chciał ale nie mógł. A możesz.

0

Chciałem już się zabrać za pisanie kodu więc zapytałem się czy lepiej to w timerze zrobić, czy w wątku te cykliczne wysyłanie. Ty mi piszesz o renderowaniu, a ja nie mam bladego pojęcia co to jest. Gdybym znał te technikę to już bym się zabrał za kodzenie. Mi te renderowanie się kojarzy z grafiką 3D, ale sądząc po wyszukiwaniu w google słowo te pewnie odnosi się do wielu różnych rzeczy.

Co do posługiwania się forum to fakt, że bawiłem się nowymi opcjami na forum i rzeczywiście nie potrzebnie zaznaczyłem jedną z odpowiedzi jako rozwiązanie. Cofnąłem to teraz, także soory.

0

Ty mi piszesz o renderowaniu, a ja nie mam bladego pojęcia co to jest. Gdybym znał te technikę to już bym się zabrał za kodzenie. Mi te renderowanie się kojarzy z grafiką 3D, ale sądząc po wyszukiwaniu w google słowo te pewnie odnosi się do wielu różnych rzeczy.

Czyli jednak wiesz, że chodzi o to, że renderowanie=wyświetlanie grafiki. A dlatego to napisałem bo mówiliśmy w konktekście gier.
Nie wmówisz mi że to, czy wysyłanie ma być w timerze czy w wątku powstrzymało ciebie przed kodzeniem. W koncu można to zmienić w ciągu paru minut max. Więc daj na poczatek w timerze zobaczymy co będzie. Tylko do cholery zacznij to pisać >.> . Bo te twoje pytania o wszystko mnie rozwalają :P

Co do posługiwania się forum to fakt, że bawiłem się nowymi opcjami na forum i rzeczywiście nie potrzebnie zaznaczyłem jedną z odpowiedzi jako rozwiązanie. Cofnąłem to teraz, także soory.

One nowe nie są... Ale spoko, ja też na początku nie ogarniałem tych dodatkowych i bardzo (nie)przydatnych opcji.

0

Kurcze, ale ciężko się z tobą gada. Po co mi piszesz o jakimś renderowaniu skoro w mojej aplikacji nie ma żadnej grafiki (poza formatką z komponentami). To, że chce napisać grę sieciową to od razu myślisz, że będzie to jakiś nowy Battlefield czy co? Gdybyś zapoznał się z moim wcześniejszym kodem który napisałem i wrzuciłem link na forum to byś (może) nie pisał o "renderowaniu" czy "symulowaniu zachowania obiektów ruchomych". Ja tu cały dziki zachodzę do głowy o co ci chodzi a tu wychodzi, że ty podajesz mi, ogólną receptę na zbudowanie pancernika podczas gdy mi...
...się rozchodzi o zbudowanie tratwy. Nie obraź się, bo mimo wszystko jestem wdzięczny, że coś wnosisz do tego tematu ale troszkę to wygląda tak, byś chciał się na kimś wyżyć. Jutro coś napiszę i wrzuce na forum.

1.Skoro twój 'post' nie mieści się jako komentarz, zrób go jako post. Właśnie dlatego jest ogarniczenie komentarza.
2.Mówiłem o przypadku ogólnym (jakaś gra) nie o twoim konkrecie. Przecież wiem że to nie jest nic 3d. Podaję ogólny przepis, bo gdzieś chyba wspomniałeś że chcesz grę napisać. Więc podaję przepis na grę a nie na twoją testapp. Wydawało mi się, że jesteś na tyle rozumny że zrozumiesz o co mi chodziło.
3.Ja się nie obrażam. Ja po prostu obrażam. Jak ktoś gada głupoty to z wielką przyjemnością go obrażam. Ale jeśli się nie [CIACH!] to potrafię się nawet czasami wysilić na jakiś żart itp. . Tak wiem, jestem strasznie zły. Nic mi nowego. W końcu nie bez powodu mam zbanowane konto.
4.No wreszcie coś napiszesz... Albo tak mówisz... Z.z

1 użytkowników online, w tym zalogowanych: 0, gości: 1