hincu Temat założony przez niniejszego użytkownika |
[sfml] network » 2012-03-29 18:29:17 Witam postanowilem napisac klient/serwer do swojej gry na protokole TCP przy uzyciu sfml no i problem pojawil sie juz na samym poczatku mianowicie na localhoscie laczy sie normalnie ale gry juz chce sie polaczyc z serwerem z poza mojego komputera to juz sie nie chce polaczyc : / zadnych dokladnych errorow mi niestety nie wywala co moze byc powodowac taka sytuacje? : ( dodam ze w programowaniu sieciowym jestem laikiem napisalem tylko ircbota i trojana na winsock ale nic z tego juz nie pamietam XD |
|
malan |
» 2012-03-29 18:32:48 Czy na komputerze, z którym się łączysz jest Twoja aplikacja (serwer)? |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-03-29 18:36:22 tak, kolega tez na test odpalil klienta u siebie i nie przychodzila zadna wiadomosc o polaczeniu z serwerem, jesli wam pomoze to moge pokazac kod mimo tego ze jest tylko laczenie klient/serwer : P |
|
malan |
» 2012-03-29 18:43:24 Sprawdźcie, czy antywirus (lub firewall) nie blokuje Twojego programu. Poza tym - skoro nic się nie dzieje to znaczy, że coś musiało pójść nie tak. Sprawdzasz w ogóle w kodzie, czy udało się zainicjalizować połączenie, czy poprawnie wysłano dane itp.? |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-03-29 18:47:10 tak, na lokalhoscie wszystko dziala dobrze ale przy laczeniu z siecia juz nie :P no coz bede zmuszony do napisania klienta/serwera w winsock bo sfml network w 1.6 cos zalewa od poczatku tak wyglada klasa client.cpp #include "Client.h"
void Client::Connect( int port, std::string server ) { Port = port; ServerAddress = "127.0.0.1"; Server.SetBlocking( false ); do { } while( !ServerAddress.IsValid() ); if( Server.Connect( Port, ServerAddress ) == sf::Socket::Done ) { IsConnected = true; std::cout << "Polaczono z serwerem " << ServerAddress << std::endl; } else if( Server.Connect( Port, ServerAddress ) == sf::Socket::Error ) { IsConnected = false; std::cout << "Blad przy laczeniu z serwerem " << ServerAddress << std::endl; } }
void Client::GetPing() { std::string buff; Server.Receive( Buffer, sizeof( Buffer ), Rec ); buff = Buffer; std::cout << Buffer << std::endl; }
a tak Server.cpp #include "Server.h"
void Server::Connect( int port ) { Port = port; Client.SetBlocking( false ); if( !Server.Listen( Port ) ) { IsConnected = false; } else { IsConnected = true; std::cout << "Serwer slucha na porcie " << Port << ", czekam na polaczenia... " << std::endl; } if( IsConnected ) { Server.Accept( Client, & ClientAddress ); std::cout << "Polaczono z klientem: " << ClientAddress << std::endl; } }
void Server::SendPing() { std::size_t buf; if( PingTimer.GetElapsedTime() >= 10.f && IsConnected ) { Client.Send( "PING", 4 ); std::cout << "Wysylam Ping" << std::endl; PingTimer.Reset(); } }
jak widac jest tylko laczenie ale nie mam pojecia czemu dzieje sie tak jak teraz : P |
|
malan |
» 2012-03-29 18:52:36 Pokaż kod jeszcze, może coś wymyślimy :) |
|
hincu Temat założony przez niniejszego użytkownika |
» 2012-03-29 18:53:32 wlasnie dodalem : P, musze napisac przynajmniej podstawowa wymiana danych miedzy graczami a serwerem do gry to przynajmniej bede mogl juz wydac pre pre pre pre pre pre pre alpha XD |
|
malan |
» 2012-03-29 19:02:03 Szczerz Ci powiem, że ciężko się połapać w tym kodzie przez te zmienne globalne. Daruj sobie klasy i najpierw zrób to w głównym programie (funckji main ). Napisz serwer, którego zadaniem jest nasłuchiwanie, a w przypadku otrzymania jakiś danych, odpowiedź do klienta. Następnie napisz klienta, który wysyła jakieś dane do serwera, a serwer mu odpowiada. Nie stosuj zmiennych globalnych czy klas. Najpierw (dla testów) zrób to tak żeby działało (oczywiście bez przesady - jakieś normy trzeba zachować), a potem, jak już będziesz wiedział jak to działa popracuj nad strukturą kodu. |
|
« 1 » 2 |