[SFML 1.6] Serwer-Klient pytanie
Ostatnio zmodyfikowano 2012-11-10 20:16
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=6781Otoż 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. |
|
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 Kurs WinSock, C++, żebyś wiedział jak to wszystko działa, a później tutorial SFML-a dotyczący komunikacji sieciowej. |
|
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: #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. |
|
« 1 » |