elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Idea] Librería para simplificar el uso de sockets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Idea] Librería para simplificar el uso de sockets  (Leído 2,435 veces)
Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
[Idea] Librería para simplificar el uso de sockets
« en: 19 Noviembre 2014, 19:15 pm »

Creo este tema para que aporten idea, una mejor solución o cualquier cosa que puedan aportar para mejorar esta pequeña idea.

En cuestión quiero crear una librería para simplificar el uso de sockets, en otra palabras, hacer las cosas más cómodamente.

La estructura general de la librería se compone de una estructura que almacena datos del socket; una estructura candidata posible podría ser algo como:

Código
  1. typedef int socket;
  2.  
  3. typedef struct libreria_socket {
  4. socket socket_fd;
  5. struct sockaddr_in host;
  6. } socket;

La segunda cosa fundamental será la inicialización de esa estructura. Para ello necesitamos 2 funciones auxiliares que recibirán los parametros directamente desde una función principal iniciar_socket; la primera de ellas crear_socket, supongamos que AF (Adress Format) es INET (IP y puerto): AF_INET; la segunda de ellas podría tener 2 variantes: iniciar_sockaddr e iniciar_sockaddrany. La diferencia de estas es que en la estructura sockaddr_in, sin_addr atendería en todo el rango: 127.0.0.1/24.

Funciones secundarias, que bien podrían servir para formar parte de una función principal que automatice el proceso dependiendo de las necesidades del usuario final ó para tener el código más organizado, limpio, estético y hacer las cosas más sencillas. Estas son las funciones conectar_socket, bind_socket, escuchar_socket, aceptar_socket (esta según lo anterior también podría tener dos variantes: aceptar_socket y aceptar_socket_addrany), cerrar_socket.

Las funciones de lectura y escritura pueden usarse nativamente. Un pseudocódigo de cómo funcionaría la librería según las ideas que tengo ahora mismo:

Código
  1. socket socket_test;
  2.  
  3. iniciar_socket(&socket_test, 8080 /* puerto */, "127.0.0.1" /* direccion ip */);
  4. conectar_socket(&socket_test);
  5.  
  6. char buffer[1024];
  7.  
  8. // Recibir datos
  9. read(socket_test.socket_fd, buffer, 1024);
  10.  
  11. // Reenviar datos
  12. write(socket_test.socket_fd, buffer, 1024);

De momento eso es todo. Aporten ideas, comentarios, soluciones, otra forma de hacerlo...

Saludos.


En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [Idea] Librería para simplificar el uso de sockets
« Respuesta #1 en: 19 Noviembre 2014, 21:32 pm »

Si te sirve de apoyo, yo tengo esta estructura:

Código
  1. #ifndef SOCKETS_H
  2. #define SOCKETS_H
  3.  
  4. #include <string>
  5. #include <vector>
  6. #include <windows.h>
  7.  
  8. using namespace std;
  9.  
  10. struct connection{
  11.    SOCKET sock;
  12.    string ip;
  13.  
  14.    connection():sock(INVALID_SOCKET){}
  15. };
  16.  
  17. string recv(SOCKET s, size_t maxChars=1024);
  18.  
  19. bool send(SOCKET s, string msg);
  20.  
  21. void setBlocking(SOCKET sock, bool blocking);
  22.  
  23. class TCPRawServer{
  24.    SOCKET _listener;
  25.    unsigned short _port;
  26.    bool _blocking;
  27.    bool _on;
  28.  
  29. public:
  30.    TCPRawServer();
  31.    TCPRawServer(unsigned short port);
  32.    ~TCPRawServer();
  33.    bool start(unsigned short port);
  34.    void finish();
  35.    connection newClient();
  36.    bool isOn()const;
  37.    unsigned short getPort()const;
  38.    void setBlocking(bool blocking);
  39.    bool isBlocking()const;
  40. };
  41.  
  42. class TCPServer:public TCPRawServer{
  43.    struct _client{
  44.        SOCKET socket;
  45.        string ip;
  46.        bool blocking;
  47.        vector<string> data;
  48.  
  49.        _client():socket(INVALID_SOCKET),blocking(0){}
  50.    };
  51.    vector<_client> _clients;
  52.  
  53. public:
  54.    TCPServer();
  55.    TCPServer(unsigned short port);
  56.    ~TCPServer();
  57.    bool newClient();
  58.    void disconnectClient(size_t clientN);
  59.    string recv(size_t clientN, size_t maxChars=1024);
  60.    bool send(size_t clientN, string msg);
  61.    vector<string>* getData(size_t clientN);
  62.    string getIp(size_t clientN)const;
  63.    void setBlocking(size_t clientN, bool blocking);
  64.    bool isBlocking(size_t clientN)const;
  65.    size_t getClientCount()const;
  66.  
  67. };
  68.  
  69. class TCPClient{
  70.    SOCKET _socket;
  71.    string _ip;
  72.    unsigned short _port;
  73.    bool _connected;
  74.    bool _blocking;
  75.  
  76. public:
  77.    TCPClient();
  78.    TCPClient(string ip, unsigned short port);
  79.    ~TCPClient();
  80.    bool connect(string ip, unsigned short port);
  81.    void disconnect();
  82.    string recv(int maxChars=1024);
  83.    bool send(const string& msg);
  84.    bool isConnected()const;
  85.    string getIp()const;
  86.    unsigned short getPort()const;
  87.    void setBlocking(bool blocking);
  88.    bool isBlocking()const;
  89. };
  90.  
  91. #endif // SOCKETS_H
  92.  

Más que nada para que veas las funcionalidades que tiene. Son las básicas.


En línea

Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
Re: [Idea] Librería para simplificar el uso de sockets
« Respuesta #2 en: 19 Noviembre 2014, 21:50 pm »

Gracias por el aporte @ivancea96, claro que me sirve, aunque no uso C++, y la orienzación a objetos lo sustituyo por un struct que contenga la llamada a las funciones (intentando imitar programación con objetos, por ejemplo socket.conectar("127.0.0.1", 8080)), aunque estoy planteándome el uso de funciones predefinidas que obtengan como parámetro la estructura que contenga el socket y la estructura sockaddr_in.

Los principales motivos por el cual quiero usar funciones predefinidas es para ahorrarme crear una estructura que contenga 7 punteros que deben ser inicializados cada vez que cree una nueva estructura.

Publicaré el código cuando lo tenga como un aporte. Estoy puliendo crear una función, que no necesita explicación: create_server_single_addrany.

Saludos.
En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
simplificar dos numeros
Programación Visual Basic
erick185 2 2,041 Último mensaje 9 Mayo 2006, 20:46 pm
por Ironhorse
Algoritmo para simplificar el hacker a wpa2-psk
Hacking
diverticulitis 5 10,777 Último mensaje 3 Marzo 2013, 00:58 am
por avesudra
Mejor libreria de sockets
Programación C/C++
_katze_ 1 2,010 Último mensaje 11 Febrero 2013, 16:19 pm
por 0xDani
Donde puedo encontrar la libreria y librerias necesarias para Sockets?
Programación C/C++
madrilillo 1 2,458 Último mensaje 27 Octubre 2013, 19:27 pm
por vangodp
Creando una libreria sockets en C
Programación C/C++
xanxito 0 2,368 Último mensaje 30 Marzo 2015, 20:16 pm
por xanxito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines