Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 21 Junio 2012, 10:42 am



Título: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: anonimo12121 en 21 Junio 2012, 10:42 am
Bueno pues solo estoy practicando así hago este pequeño aporte fácil.


Cliente
Código
  1. #include <iostream>
  2. #include <SFML/Network.hpp>
  3. using namespace std;
  4. // Puerto 25569
  5. struct Suma{
  6.    int n1;
  7.    int n2;
  8. };
  9. int main(int argc,char *argv[]){
  10.    sf::SocketTCP Conexion;
  11.    sf::Packet Paquete;
  12.    while(Conexion.Connect(25569,sf::IPAddress("localhost")) !=sf::Socket::Done)cout << "Buscando servidor..."<<endl;
  13.    cout << "Servidor encontrado." <<endl;
  14.    //char Datos[128];
  15.    Suma s;
  16.    while(1){
  17.        cout << "Escribe el primer numero: ";
  18.        cin >> s.n1;
  19.        cout << "Escribe el segundo numero: ";
  20.        cin >> s.n2;
  21.        Paquete  << s.n1 << s.n2;
  22.        if(Conexion.Send(Paquete) != sf::Socket::Done)cout << "no se pudo mandar el mensaje";
  23.    }
  24.    return 0;
  25.  
  26. }
  27.  

Servidor
Código
  1. #include <iostream>
  2. #include <SFML/Network.hpp>
  3. using namespace std;
  4. // Puerto 25569
  5.  
  6. struct Suma{
  7.    int n1;
  8.    int n2;
  9. };
  10. int main(int argc,char *argv[]){
  11.    sf::SocketTCP Conexion;
  12.    sf::SocketTCP Client;
  13.    sf::IPAddress ClientAddress;
  14.    sf::Packet Paquete;
  15.    //char Buffer[128];
  16.    //std::size_t Received;
  17.    Suma s;
  18.    Conexion.Listen(25569);
  19.    Conexion.Accept(Client,&ClientAddress);
  20.    while(1){
  21.        if(Client.Receive(Paquete) != sf::Socket::Done);
  22.        else {
  23.            Paquete.GetData();
  24.            Paquete  >> s.n1 >> s.n2;
  25.            cout << "Client: " <<  s.n1+s.n2<< endl;
  26.        }
  27.    }
  28.  
  29.    return 0;
  30.  
  31. }
  32.  


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: 0xDani en 21 Junio 2012, 16:31 pm
¿Que libreria estas usando? No me suena SFML.


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: anonimo12121 en 21 Junio 2012, 17:41 pm
http://www.sfml-dev.org/

Es bastante buena :)


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: X3R4CK3R en 21 Junio 2012, 20:31 pm
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


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: anonimo12121 en 21 Junio 2012, 20:39 pm
Somos socios XD.


Ya lo he arreglado. hay que vaciar los Packets.
Client
Código
  1. #include <iostream>
  2. #include <SFML/Network.hpp>
  3. #include <cstdio>
  4. using namespace std;
  5. // Puerto 25569
  6. struct Suma{
  7.    int n1;
  8.    int n2;
  9. };
  10. int main(int argc,char *argv[]){
  11.    sf::SocketTCP Conexion;
  12.    sf::Packet Paquete;
  13.    while(Conexion.Connect(25569,sf::IPAddress("localhost")) !=sf::Socket::Done)cout << "Buscando servidor..."<<endl;
  14.    cout << "Servidor encontrado." <<endl;
  15.    //char Datos[128];
  16.    Suma s;
  17.    while(1){
  18.        cout << "Escribe el primer numero: ";
  19.        cin >> s.n1;
  20.        cout << "Escribe el segundo numero: ";
  21.        cin >> s.n2;
  22.        Paquete  << s.n1 << s.n2;
  23.        if(Conexion.Send(Paquete) != sf::Socket::Done)cout << "no se pudo mandar el mensaje";
  24.        Paquete.Clear();
  25.    }
  26.    return 0;
  27.  
  28. }
Servidor
Código
  1. #include <iostream>
  2. #include <SFML/Network.hpp>
  3. using namespace std;
  4. // Puerto 25569
  5.  
  6. struct Suma{
  7.    int n1;
  8.    int n2;
  9. };
  10. int main(int argc,char *argv[]){
  11.    sf::SocketTCP Conexion;
  12.    sf::SocketTCP Client;
  13.    sf::IPAddress ClientAddress;
  14.    sf::Packet Paquete;
  15.    //char Buffer[128];
  16.    //std::size_t Received;
  17.    Suma s;
  18.    Conexion.Listen(25569);
  19.    Conexion.Accept(Client,&ClientAddress);
  20.    while(1){
  21.        if(Client.Receive(Paquete) != sf::Socket::Done);
  22.        else {
  23.            Paquete.GetData();
  24.            Paquete  >> s.n1 >> s.n2;
  25.            cout << "Client: " <<  s.n1+s.n2<< endl;
  26.            Paquete.Clear();
  27.        }
  28.    }
  29.  
  30.    return 0;
  31.  
  32. }


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: X3R4CK3R en 21 Junio 2012, 23:07 pm
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


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: anonimo12121 en 21 Junio 2012, 23:53 pm
xD yo he puesto los dos para hacerlo más rápido , pero te doy la razón :) go Skype


Título: Re: Sockets, Mandando unos números y el servidor haciendo la operación.
Publicado por: DaniellesSchaffer en 14 Octubre 2015, 00:25 am
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?