Ir al contenido


Foto

Openssl con C++ Builder Crear Socket


  • Por favor identifícate para responder
3 respuestas en este tema

#1 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 09 agosto 2011 - 12:27

Hola

aca me encontre como compilar
Openssl con c++Builder 5

http://rudeserver.co...sltutorial.html

logre compilarlo

tal cual


ahora no se como completar lo que el autor da como obvio.

crear un socket stream con c++ builder o c++


aqui el codigo para probar que todo saldio bien
cpp
  1. #include <openssl/crypto.h>
  2.             #include <openssl/x509.h>
  3.             #include <openssl/pem.h>
  4.             #include <openssl/ssl.h>
  5.             #include <openssl/err.h>

  • Add the following include directives to the application:     
  • Create a SOCKET and connect to an https server on port 443 like you normally      would....
  • Assuming your socket is named sock, you then perform your ssl communications      like this:

    cpp
    1.       SOCKET sock;//JUSTO AQUI NO SE COMO CREAR EL SOCK_STREAM ayuda por favor
    2.     // build regular SOCK_STREAM sock and connect to server           
    3. // ... (I'm not going into these details)           
    4. // pretend sock is now connected....               
    5. // here's the data items we'll use....           
    6. char buf[1000];           
    7. char request[1000];             
    8. SSL_CTX *ctx;           
    9. SSL *ssl;           
    10. int err;         
    11.     // initialize SSL stuff                   
    12. SSL_load_error_strings();     
    13.     SSL_library_init();         
    14.     // build the SSL objects...         
    15.     ctx=SSL_CTX_new(SSLv2_client_method());     
    16.     ssl=SSL_new(ctx);                         
    17.     // assign the socket you created for SSL to use           
    18.     SSL_set_fd(ssl, sock);
    19.     // communicate!!            /////////////////////////////////////////////     
    20.     err=SSL_connect(ssl);     
    21.     sprintf(request, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n","/""www.theserver.com"); 
    22.     err=SSL_write(ssl, request, strlen(request)); 
    23.     while(1){ 
    24.         int read_size;           
    25.       read_size=SSL_read(ssl, buf, sizeof(buf)-1);     
    26.         buf[read_size]='\0';     
    27.         if(read_size > 0){
    28.           // I'm assuming you have a Memo object
    29.           //on your application form...               
    30. Memo1->SetSelTextBuf(buf);
    31. }
    32.         else{
    33.     break;     
    34.       }
    35.     }
    36.     // free the SSL stuff....             
    37.     SSL_shutdown(ssl);           
    38.   SSL_free(ssl);         
    39.     SSL_CTX_free(ctx);

  • ya ando buscando con que servidor probar el socket creado.

    ¿alguna servidor que suguieran para probar el codigo?


    gracias

  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 29 agosto 2011 - 03:45

Te muestro la forma de establecer una conexión con un servidor a bajo nivel con sockets en Builder:

cpp
  1. //---------------------------------------------------------------------------
  2.  
  3. #pragma hdrstop
  4.  
  5. //---------------------------------------------------------------------------
  6.  
  7. #pragma argsused
  8. #include <winsock2.h> //la cabezera para usar las funciones de winsock
  9.  
  10. //Enlazamos la libreria del winsock
  11. #pragma comment(lib,"ws2_32.lib")
  12.  
  13.  
  14. int main()
  15. {
  16.   WSADATA wsa;
  17.   SOCKET sock;
  18.   struct hostent *host;
  19.   struct sockaddr_in direc;
  20.   char Buffer[1024];
  21.   int len;
  22.   int Port = 80;  // Puerto de conexión
  23.  
  24.   //Inicializamos
  25.   WSAStartup(MAKEWORD(2,2),&wsa);
  26.  
  27.   // Dirección del Host
  28.   host=gethostbyname("localhost");  // Aquí pon la dirección del servidor
  29.  
  30.   //creamos el socket
  31.   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  32.  
  33.   //Dirección de conexión
  34.   direc.sin_family=AF_INET;
  35.   direc.sin_port=htons(Port);
  36.   direc.sin_addr = *((struct in_addr *)host->h_addr);
  37.   memset(direc.sin_zero,0,8);
  38.  
  39.   //Establecer la conexión
  40.   connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
  41.  
  42.   // Comunicación:
  43.   strcpy(Buffer, "Hola"); 
  44.   len = send(sock, Buffer, strlen(Buffer), 0); //enviar
  45.   len = recv(sock, Buffer, sizeof(Buffer), 0); //recibir
  46.   return 0;
  47. }

Saludos.
  • 0

#3 angelo2007

angelo2007

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 30 agosto 2011 - 07:39

lo voy a probar
escafandra 
''¿supongo que de forma inversa se hace el servidor?

para probar uno con el otro.

gracias por responder._D
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 31 agosto 2011 - 12:14

''¿supongo que de forma inversa se hace el servidor?


Para el servidor estudia la API bind.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.