[SFML (Network)] Program (Serwer) przestaje cokolwiek robic a Client nie odbiera wiadomosci
Ostatnio zmodyfikowano 2012-07-31 13:28
RazzorFlame Temat założony przez niniejszego użytkownika |
[SFML (Network)] Program (Serwer) przestaje cokolwiek robic a Client nie odbiera wiadomosci » 2012-07-30 17:18:01 Witajcie. Chyba temat mówi sam za siebie. A tak dorzuce ze wydaje mi sie ze to jakis blad z wysyłaniem bo nie przychodzi wiadomośc do Clienta. Oczywiscie narazie tylko cwicze wiec nie uzywam narazie klas. Oto kod serwera: #include <SFML/Network.hpp> #include <iostream> #include <windows.h>
const int IPORT = 4557;
using namespace std;
int main() { sf::SocketTCP Server; if( !Server.Listen( IPORT ) ) return 0; cout << "Server is listening to port: " << IPORT << ", and waiting for connections..."; sf::IPAddress ClientAddress; sf::SocketTCP Client; Server.Accept( Client, & ClientAddress ); cout << "Client connected!" << endl; string Rec = ""; string Mess = ""; size_t recei; do { Rec = ""; getline( cin, Mess ); if( Client.Send( Mess.c_str(), sizeof( Mess ) ) != sf::Socket::Done ) break; if( Client.Receive(( char * ) Rec.c_str(), sizeof( Rec ), recei ) != sf::Socket::Done ) break; if( Rec != "" ) cout << Rec << endl; } while( Rec != "Bye!" ); system( "pause>>nul" ); return 0; }
A to kod klienta #include <SFML/Network.hpp> #include <iostream> #include <windows.h>
const int IPORT = 4557;
using namespace std;
int main() { sf::IPAddress ServerAddress( 5, 201, 74, 196 ); if( !ServerAddress.IsValid() ) return 0; sf::SocketTCP Client; if( Client.Connect( IPORT, ServerAddress ) != sf::Socket::Done ) return 0; cout << "Connected to address: " << ServerAddress << endl; char * rec; size_t recei; do { rec = ""; if( Client.Receive( rec, sizeof( rec ), recei ) != sf::Socket::Done ) break; if( rec != "" ) cout << rec << endl; } while( rec != "Bye!" ); system( "pause>>nul" ); return 0; }
|
|
DejaVu |
» 2012-07-30 19:14:18 Klient musi określić ile bajtów chce odebrać. Ty próbujesz przepchnąć tekst tak jakby to był strumień, który wie co wrzucasz do niego i wie jak go odczytać. Reasumując: błędy u podstaw :) |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2012-07-31 07:16:11 Dzieki DejaVu własnie sam sie juz zastanawialem dlaczego nie ma wielkości tego w bajtach a sizeof na wskaźnik to chyba troche nie tak :D Tzn powinienem zmienic zmienna "recei" na ilość bajtów które chce odebrać? Spk
Edit: nie działa :( |
|
ison |
» 2012-07-31 13:26:33 Przeczytaj dokumentację, trzeci argument - recei jest brany jako referencja i do niego jest zapisywana ilość bajtów pobranych, ilość bajtów jaką chcesz pobrać to 2 argument. Jeśli nie chcesz się martwić o takie pierdoły to użyj biblioteki ENet. |
|
ison |
» 2012-07-31 13:28:52 <double post> |
|
« 1 » |