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

[SFML 1.6] Serwer-Klient pytanie

Ostatnio zmodyfikowano 2012-11-10 20:16
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
[SFML 1.6] Serwer-Klient pytanie
» 2012-11-10 17:38:37
Otóż przegladalem temat ktory byl juz na tym forum odnośnie networkingu. Tu jest link do tego tematu:
http://cpp0x.pl/forum/temat/?id=6781
Otoż użytkownik w swoim kodzie ustawił na nie blokujące sockety a później jakoś tak dziwnie zrobił. Czy w nieblokujących socketach nie powinno być pętli na to? Bo czytałem że sama funkcja accept jeśli socket jest w trybie nie blokujacym (i nie ma w tej chwili polaczenia) zwraca sf::Socket::NotReady. Więc powinna tam być pętla, czy może użytkownik specjalnie tak zrobil? Jeśli ktoś nie zrozumie mojego pytania (bo wiem, jest jakoś tak chaotycznie napisane) to spróbuje dokladniej wytłumaczyć. Z góry dzieki.
P-68943
DejaVu
» 2012-11-10 19:00:50
Jakoś trudno się ustosunkować do Twojej wypowiedzi zważywszy na fakt, że w temacie, który podałeś są tylko i wyłącznie fragmenty implementacji komunikacji sieciowej (metody), a nie cały kod niezbędny dla serwera. Poczytaj » KursyKurs WinSock, C++ kurs, żebyś wiedział jak to wszystko działa, a później tutorial SFML-a  dotyczący komunikacji sieciowej.
P-68948
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-11-10 20:16:59
Ok troche pomyslalem i mi coś tam mi wyszło. Ale jest jedno "ale" (xd) - chodzi o to że zrobilem Serwer w serwerze nie blokujacy a w cliencie mi nie wyszlo. W serwerze jest wszystko fajnie. Tu jest kod clienta:
C/C++
#include <SFML/Network.hpp>
#include <iostream>
#include <windows.h>

const int GamePort = 5173;

using namespace std;

int main()
{
    sf::IPAddress servAddr( 5, 141, 38, 51 );
    if( servAddr.IsValid() == false )
    {
        cout << "Adres serwera jest niewlasciwy!" << endl;
        system( "pause>>nul" );
        return - 1;
    }
    sf::SocketTCP ClientSock;
    ClientSock.SetBlocking( false );
    bool isConnected = false;
   
    while( 1 == 1 )
    {
        if( ClientSock.Connect( GamePort, servAddr ) == sf::Socket::Done )
        {
            isConnected = true;
            break;
        }
    }
    if( isConnected )
    {
        char recData[ 128 ];
        size_t recSize;
       
        bool isReady = false;
        while( isReady == false )
        {
            if( ClientSock.Receive( recData, sizeof( recData ), recSize ) != sf::Socket::Done ) continue;
            else
            {
                isReady = true;
            }
        }
        cout << "Dostarczona wiadomosc z serwera: " << recData << endl;
    }
   
    ClientSock.Close();
    system( "pause >> nul" );
    return 0;
}
Kod jest troche poprzerabiany ale i tak nie dziala.
A mianowicie chodzi o to że cały czas zostaje w petli w ktorej chce sie podloczyc do serwera. Nawet jesli serwer jest wlaczony. A i wlasnie. servAddr (typu sf::IPAddress) jest moim adresem hamachi. Przed dodaniem SetBlocking(false) podlaczał sie.

Edit:
Ahh - temat zamykam (ps wystarczylo przeniesc SetBlocking(false) za petle gdzie jest podlaczanie do serwera.
P-68950
« 1 »
  Strona 1 z 1