• Domingo 22 de Diciembre de 2024, 14:41

Autor Tema:  Como enviar un dato a traves de sockets en windows c++  (Leído 3447 veces)

noob.9412

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Como enviar un dato a traves de sockets en windows c++
« en: Viernes 7 de Septiembre de 2012, 21:54 »
0
 :ayuda:Hola colegas pasa que yo hice un programa cliente-servidor en donde el cliente se conecta al servidor y si el cliente lo desea se conecta. Entonces los programas se envian entre si unas cadenas de caracteres. Pero ahora que pasa si quiero enviar por ejemplo una varible de tipo int o de algun otro tipo? , como lo hago ? . Por favor si alguien sabe como se hace que por favor me ayude. Aqui les dejo el codigo fuente del cliente y el servidor. Pueden ejecutar el programa en su misma pc:

.:SERVIDOR:.

servidor.cpp

Código: C++
  1.  
  2. #include "stdafx.h"
  3.  
  4. using namespace std;
  5. char mensaje[500]="Oscar Julio Acosta Gonzalez";
  6. char mensaje2[500];
  7.  
  8. void main()
  9. {
  10.         int respuesta;
  11.         WSAData wsaData;
  12.         WORD DLLVERSION;
  13.         DLLVERSION = MAKEWORD(2,1);
  14.  
  15.         respuesta = WSAStartup(DLLVERSION, &wsaData);
  16.  
  17.         SOCKADDR_IN addr;
  18.         int addrlen = sizeof(addr);
  19.         SOCKET sListen;
  20.         SOCKET sConnect;
  21.  
  22.         sConnect = socket(AF_INET,SOCK_STREAM,NULL);
  23.         addr.sin_addr.s_addr = inet_addr("192.168.1.1");
  24.         addr.sin_family = AF_INET;
  25.         addr.sin_port = htons(1234);
  26.  
  27.         sListen = socket(AF_INET,SOCK_STREAM,NULL);
  28.         bind(sListen, (SOCKADDR*) &addr, sizeof(addr));
  29.         listen(sListen, SOMAXCONN);
  30.  
  31.  
  32.         for(;;){
  33.  
  34.                 cout << "Esperando por conexiones entrantes" << endl;
  35.  
  36.                 if(sConnect = accept(sListen,(SOCKADDR*)&addr,&addrlen))
  37.                 {
  38.                         cout << "Una conection fue encontrada" << endl;
  39.                         respuesta = send(sConnect,mensaje,100,NULL);
  40.                         respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL);
  41.  
  42.                 }
  43.  
  44.         }
  45.  
  46.  
  47. }
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  

LIBRERIAS NECESARIAS

Código: C++
  1. stdafx.h
  2.  
  3. // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema
  4. // o archivos de inclusión específicos de un proyecto utilizados frecuentemente,
  5. // pero rara vez modificados
  6. //
  7.  
  8. #pragma once
  9. #pragma comment(lib,"Ws2_32.lib") ;
  10. #include "targetver.h"
  11. #include <tchar.h>
  12. #include <sdkddkver.h>
  13. #include <conio.h>
  14. #include <stdio.h>
  15. #include <WinSock2.h>
  16. #include <Windows.h>
  17. #include <iostream>
  18.  
  19.  
  20.  
  21. // TODO: mencionar aquí los encabezados adicionales que el programa necesita
  22.  

--------------------------------------------------------------------------------------------

.:CLIENTE:.

cliente.cpp

Código: C++
  1. #include "stdafx.h"
  2.  
  3. using namespace std;
  4. string confirm;
  5. string strmensaje;
  6. char mensaje[500];
  7. char mensaje2[500]="Mensaje Recivido";
  8.  
  9. void main()
  10. {
  11.         int respuesta;
  12.         WSAData wsaData;
  13.         WORD DLLVersion;
  14.         DLLVersion = MAKEWORD(2,1,);
  15.         respuesta = WSAStartup(DLLVersion, &wsaData);
  16.  
  17.         SOCKADDR_IN addr;
  18.         int addrlen = sizeof(addr);
  19.         SOCKET sConnect;
  20.  
  21.         sConnect = socket(AF_INET,SOCK_STREAM,NULL);
  22.         addr.sin_addr.s_addr = inet_addr("192.168.1.1");
  23.         addr.sin_family = AF_INET;
  24.         addr.sin_port = htons(1234);
  25.  
  26.         cout << "Quieres conectarte al servidor? [S/N]" << endl;
  27.         cin >> confirm;
  28.  
  29.         if(confirm== "N")
  30.         {
  31.                 exit(1);
  32.         }
  33.         else
  34.         {
  35.                 if(confirm == "S")
  36.                 {
  37.                         connect(sConnect,(SOCKADDR*)&addr, sizeof(addr));
  38.                         respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL);
  39.                         respuesta = send(sConnect,mensaje2,100,NULL);
  40.                         strmensaje = mensaje;
  41.                         cout << strmensaje << endl;
  42.  
  43.                         getchar();
  44.                 }
  45.         }
  46.  
  47.         getchar();
  48. }
  49.  


LIBRERIAS NECESARIAS

Código: C++
  1. stdafx.h
  2.  
  3.  
  4. // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema
  5. // o archivos de inclusión específicos de un proyecto utilizados frecuentemente,
  6. // pero rara vez modificados
  7. //
  8.  
  9. #pragma once
  10. #pragma comment(lib,"Ws2_32.lib")
  11.  
  12. #include "targetver.h"
  13. #include <stdio.h>
  14. #include <tchar.h>
  15. #include <sdkddkver.h>
  16. #include <iostream>
  17. #include <WinSock2.h>
  18. #include <Windows.h>
  19. #include <string>
  20.  
  21.  
  22.  
  23.  
  24.  
  25. // TODO: mencionar aquí los encabezados adicionales que el programa necesita
  26.  
« última modificación: Viernes 7 de Septiembre de 2012, 21:56 por noob.9412 »

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re:Como enviar un dato a traves de sockets en windows c++
« Respuesta #1 en: Miércoles 12 de Marzo de 2014, 01:21 »
0
send puede enviar datos binarios, solo tienes que pasarle el puntero del dato y el tamaño

send(sConnect,&dato, sizeof(dato),0); por ejemplo

otra opcion, sencilla, seria usar Base64 para convertir los datos en strings... pero lo primero es mejor idea :D :yes: