Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[sfml] network

Ostatnio zmodyfikowano 2012-03-29 19:10
Autor Wiadomość
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
P-53441
malan
» 2012-03-29 18:32:48
Czy na komputerze, z którym się łączysz jest Twoja aplikacja (serwer)?
P-53442
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
P-53443
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.?
P-53444
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
C/C++
#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
C/C++
#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
P-53445
malan
» 2012-03-29 18:52:36
Pokaż kod jeszcze, może  coś wymyślimy :)
P-53446
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
P-53447
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.
P-53449
« 1 » 2
  Strona 1 z 2 Następna strona