Bueno pues solo estoy practicando así hago este pequeño aporte fácil.
Cliente
#include <iostream>
#include <SFML/Network.hpp>
using namespace std;
// Puerto 25569
struct Suma{
int n1;
int n2;
};
int main(int argc,char *argv[]){
sf::SocketTCP Conexion;
sf::Packet Paquete;
while(Conexion.Connect(25569,sf::IPAddress("localhost")) !=sf::Socket::Done)cout << "Buscando servidor..."<<endl;
cout << "Servidor encontrado." <<endl;
//char Datos[128];
Suma s;
while(1){
cout << "Escribe el primer numero: ";
cin >> s.n1;
cout << "Escribe el segundo numero: ";
cin >> s.n2;
Paquete << s.n1 << s.n2;
if(Conexion.Send(Paquete) != sf::Socket::Done)cout << "no se pudo mandar el mensaje";
}
return 0;
}
Servidor
#include <iostream>
#include <SFML/Network.hpp>
using namespace std;
// Puerto 25569
struct Suma{
int n1;
int n2;
};
int main(int argc,char *argv[]){
sf::SocketTCP Conexion;
sf::SocketTCP Client;
sf::IPAddress ClientAddress;
sf::Packet Paquete;
//char Buffer[128];
//std::size_t Received;
Suma s;
Conexion.Listen(25569);
Conexion.Accept(Client,&ClientAddress);
while(1){
if(Client.Receive(Paquete) != sf::Socket::Done);
else {
Paquete.GetData();
Paquete >> s.n1 >> s.n2;
cout << "Client: " << s.n1+s.n2<< endl;
}
}
return 0;
}
¿Que libreria estas usando? No me suena SFML.
http://www.sfml-dev.org/
Es bastante buena :)
Tú code presenta un fallo al hacer una segunda suma:
El cliente envía los 2 nuevos sumandos pero el server sólo imprime el resultado de la primera suma, una y otra vez, en lugar de la nueva suma.
Saludos
Somos socios XD.
Ya lo he arreglado. hay que vaciar los Packets.
Client
#include <iostream>
#include <SFML/Network.hpp>
#include <cstdio>
using namespace std;
// Puerto 25569
struct Suma{
int n1;
int n2;
};
int main(int argc,char *argv[]){
sf::SocketTCP Conexion;
sf::Packet Paquete;
while(Conexion.Connect(25569,sf::IPAddress("localhost")) !=sf::Socket::Done)cout << "Buscando servidor..."<<endl;
cout << "Servidor encontrado." <<endl;
//char Datos[128];
Suma s;
while(1){
cout << "Escribe el primer numero: ";
cin >> s.n1;
cout << "Escribe el segundo numero: ";
cin >> s.n2;
Paquete << s.n1 << s.n2;
if(Conexion.Send(Paquete) != sf::Socket::Done)cout << "no se pudo mandar el mensaje";
Paquete.Clear();
}
return 0;
}
Servidor
#include <iostream>
#include <SFML/Network.hpp>
using namespace std;
// Puerto 25569
struct Suma{
int n1;
int n2;
};
int main(int argc,char *argv[]){
sf::SocketTCP Conexion;
sf::SocketTCP Client;
sf::IPAddress ClientAddress;
sf::Packet Paquete;
//char Buffer[128];
//std::size_t Received;
Suma s;
Conexion.Listen(25569);
Conexion.Accept(Client,&ClientAddress);
while(1){
if(Client.Receive(Paquete) != sf::Socket::Done);
else {
Paquete.GetData();
Paquete >> s.n1 >> s.n2;
cout << "Client: " << s.n1+s.n2<< endl;
Paquete.Clear();
}
}
return 0;
}
Tan solo es necesario que se limpie el paquete del cliente, en el server es prescindible.
yo precisamente hacia ésto al contrario: solo lo limpiaba en el server xD
xD yo he puesto los dos para hacerlo más rápido , pero te doy la razón :) go Skype
Hola!
Estoy probando tu código y lo que hice fue meter el archivo de SFML en las librerías de Code::Blocks, pero me aparecen errores como SocketTCPno es miembro de sf. Podrías ayudarme?