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

[SFML (Network)] Program (Serwer) przestaje cokolwiek robic a Client nie odbiera wiadomosci

Ostatnio zmodyfikowano 2012-07-31 13:28
Autor Wiadomość
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:
C/C++
#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
C/C++
#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;
}
P-61452
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 :)
P-61463
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 :(
P-61480
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.
P-61493
ison
» 2012-07-31 13:28:52
<double post>
P-61494
« 1 »
  Strona 1 z 1