Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   26 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
MetalowyNerd

Networking podstawy

Pytanie

Witam. Bardzo interesuje mnie Networking w GM:Studio, ale za nic nie mogę tego zrozumieć. Chcę mieć dwa programy, Server i Client. W projekcie Server mam następujący kod:

 

Create:

 

GML
GMLglobal.metal = 500;

ini_open("metal.data");

ini_write_real("saved","metal",global.metal);

ini_close();

 

Networking:

 

GML
GMLnetwork_create_server(network_socket_tcp,6510,20);

 

buff = buffer_load("metal.data");

network_send_packet(sock, buff, buffer_get_size(buff));

 

Natomiast w projekcie Client mam:

 

Create:

 

GML
GMLglobal.metal = 0;

 

Networking:

 

GML
GMLclient = network_create_socket(network_socket_tcp);

network_connect(client,"192.134.0.1",6510);

 

I nie rozumiem jednej rzeczy, jak Client ma odebrać pakiet z wartością zmiennej global.metal z Server'a? Chcę, żeby Client mógł ją wyświetlić w swoim okienku.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
I am vader    24

W evencie networking nie zapisujesz tworzenia serwera/klienta tylko obslugujesz przychodzace pakiety.

Serwer i klienta musisz zrobic w jakims innym evencie, np. w create.

 

W evencie networking korzystasz ze stałej async_load aby skorzystać z ds_mapy w której masz przychodzące dane, zapisane w async_load[? "buffer"] bądź ds_map_find_value(async_load,"buffer"); w zaleznosci od tego czy uzywasz accessorow czy nie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Hmm. No to teraz to wszystko wygląda tak i nadal nie działa, a dodatkowo Client wyrzuca błąd i wyłącza Server.

 

SERVER:

Create:

GML
ini_open("data.sav");

ini_write_real("saved","metal",500);

ini_close();

network_create_server(network_socket_tcp,6510,20);

 

Networking:

GML
buff = buffer_load("data.sav");

network_send_packet(sock, buff, buffer_get_size(buff));

 

CLIENT:

Create:

GML
global.metal = 0;

client = network_create_socket(network_socket_tcp);

network_connect(client,"127.0.0.1",6510);

 

Networking:

GML
if (ds_map_find_value(async_load, metal) == true)//chciałem przy okazji zrobić, żeby ustawiało wartość -666, kiedy nie odbiera pakietu ze zmienną "metal"

global.metal = ds_map_find_value(async_load, metal);

else

global.metal = -666;

 

Draw:

GML
draw_text(10,10,fps);

draw_text(300,300,global.metal);//Żeby było widać, kiedy przychodzą pakiety z Server'a</span>

 

Wiem. Ostro kaleczę, ale zawsze miałem problem z programowaniem czegoś, co działa przez neta. Chodzi mi tylko i wyłącznie o to, żebym wiedział, jak przesłać zmienną z serwera na oddzielny program klienta.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
I am vader    24

W async_load nie ma klucza o nazwie "metal".

Dane przekazuje sie tak:

 

1. Wyczyść bufor za pomocą buffer_seek

2. Dodaj dane do bufora za pomocą buffer_write

3. Wyślij bufor za pomocą network_send_packet

4. Odbierz bufor za pomocą async_load[? "buffer"] lub ds_map_find_value(async_load, "buffer")

5. Wczytaj dane z bufora w tej samej kolejnosci i uzywajac tego samego typu danych co zapisujac dane w kroku 2.

 

 

Kroki 4 i 5 są w evencie networking

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×