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

[SFML 2.1] Wysylanie pakietów przez socket

Ostatnio zmodyfikowano 2013-08-17 18:15
Autor Wiadomość
MonoMisiek
Temat założony przez niniejszego użytkownika
[SFML 2.1] Wysylanie pakietów przez socket
» 2013-08-17 13:46:14
Mam problem z wysyłaniem danych przez soket.
Robię tak jak w tutorialu http://www.sfml-dev.org​/tutorials/2.1​/network-packet.php


Aplikacja klienta

C/C++
int a = 2;
int b = 4;
sf::Packet packet;
packet << a << b;
if( socket.send( packet ) != sf::Socket::Done )
{
    cout << "pakiet sie nie wyslal" << endl;
}
else cout << "pakiet sie wyslal" << endl;

-------------------------
Aplikacja serwera

C/C++
int a;
int b;
sf::Packet packet;
packet >> a >> b;
socket.receive( packet );

cout << " a= " << a << " b= " << b << endl;

-------------------------
Zamiast a= 2 b= 4, wyskakuje a= -858993460 b= -858993460...
Jak to naprawić??
P-90429
Mrovqa
» 2013-08-17 14:08:43
Może byś napisał, co konkretnie nie działa? Mam nadzieję, iż nawiązujesz połączenie między socketami. W takim przypadku prawdopodobne jest, iż firewall Ci blokuje komunikację lub nie masz przekierowania portów (jeśli nie łączysz się w LANie). Sprawdź najpierw, czy program działa na localhoście.
P-90431
MonoMisiek
Temat założony przez niniejszego użytkownika
» 2013-08-17 14:16:18
Robię właśnie na localhoscie. Firewall windowsowy wyłączony, innego nie mam. Klient łączy się z serwerem i nie wywala przy tym błędów.

Co dokładnie nie działa? Gdy wysyłam 4, odbieram -858993460. 
Gdy robię dokładnie tak jak w tutorialu
wysyłam:

C/C++
sf::Uint16 x = 10;
std::string s = "hello";
double d = 0.6;

otrzymuję:

x= 52428 s=  d= -9.25596e+061

P-90433
ison
» 2013-08-17 14:46:14
Nawet nie sprawdzasz co zwraca receive
P-90434
MonoMisiek
Temat założony przez niniejszego użytkownika
» 2013-08-17 15:31:13
nie rozumiem
jeśli chodzi o to cout<<socket.receive(packet); //to się = 3
P-90442
megatron
» 2013-08-17 16:11:57
musisz pakiet przypisać do jakiejś zmiennej a potem wyświetlić
P-90444
ison
» 2013-08-17 16:45:37
Poza tym na serwerze najpierw wczytujesz zmienne, a potem dopiero odbierasz pakiet
P-90447
MonoMisiek
Temat założony przez niniejszego użytkownika
» 2013-08-17 16:52:35
Przecież przypisuje do a i b...
Mniejsza z tym, znalazłem błąd, przy definicji serwera. Tutorial wprowadził mi małe zamieszanie do kodu...

Czasami jest użyte  sf::TcpSocket socket; a przy deklaracji serwera sf::TcpSocket client;

inaczej mówiąc powinno być w tutorialu
// accept a new connection
sf::TcpSocket socket; //zamiast client
if (listener.accept(socket) != sf::Socket::Done) //zamiast client

Niby wychodzi na to samo, ale przez socket z błędami idzie...
P-90448
« 1 » 2
  Strona 1 z 2 Następna strona