Informática en general > Servidores
Como enviar un dato a traves de sockets en windows c++
(1/1)
noob.9412:
: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++ --- #include "stdafx.h" using namespace std;char mensaje[500]="Oscar Julio Acosta Gonzalez";char mensaje2[500]; void main(){ int respuesta; WSAData wsaData; WORD DLLVERSION; DLLVERSION = MAKEWORD(2,1); respuesta = WSAStartup(DLLVERSION, &wsaData); SOCKADDR_IN addr; int addrlen = sizeof(addr); SOCKET sListen; SOCKET sConnect; sConnect = socket(AF_INET,SOCK_STREAM,NULL); addr.sin_addr.s_addr = inet_addr("192.168.1.1"); addr.sin_family = AF_INET; addr.sin_port = htons(1234); sListen = socket(AF_INET,SOCK_STREAM,NULL); bind(sListen, (SOCKADDR*) &addr, sizeof(addr)); listen(sListen, SOMAXCONN); for(;;){ cout << "Esperando por conexiones entrantes" << endl; if(sConnect = accept(sListen,(SOCKADDR*)&addr,&addrlen)) { cout << "Una conection fue encontrada" << endl; respuesta = send(sConnect,mensaje,100,NULL); respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL); } } }
LIBRERIAS NECESARIAS
--- Código: C++ ---stdafx.h // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema// o archivos de inclusión específicos de un proyecto utilizados frecuentemente,// pero rara vez modificados// #pragma once#pragma comment(lib,"Ws2_32.lib") ;#include "targetver.h"#include <tchar.h>#include <sdkddkver.h>#include <conio.h>#include <stdio.h>#include <WinSock2.h>#include <Windows.h>#include <iostream> // TODO: mencionar aquí los encabezados adicionales que el programa necesita
--------------------------------------------------------------------------------------------
.:CLIENTE:.
cliente.cpp
--- Código: C++ ---#include "stdafx.h" using namespace std;string confirm;string strmensaje;char mensaje[500];char mensaje2[500]="Mensaje Recivido"; void main(){ int respuesta; WSAData wsaData; WORD DLLVersion; DLLVersion = MAKEWORD(2,1,); respuesta = WSAStartup(DLLVersion, &wsaData); SOCKADDR_IN addr; int addrlen = sizeof(addr); SOCKET sConnect; sConnect = socket(AF_INET,SOCK_STREAM,NULL); addr.sin_addr.s_addr = inet_addr("192.168.1.1"); addr.sin_family = AF_INET; addr.sin_port = htons(1234); cout << "Quieres conectarte al servidor? [S/N]" << endl; cin >> confirm; if(confirm== "N") { exit(1); } else { if(confirm == "S") { connect(sConnect,(SOCKADDR*)&addr, sizeof(addr)); respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL); respuesta = send(sConnect,mensaje2,100,NULL); strmensaje = mensaje; cout << strmensaje << endl; getchar(); } } getchar();}
LIBRERIAS NECESARIAS
--- Código: C++ ---stdafx.h // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema// o archivos de inclusión específicos de un proyecto utilizados frecuentemente,// pero rara vez modificados// #pragma once#pragma comment(lib,"Ws2_32.lib") #include "targetver.h"#include <stdio.h>#include <tchar.h>#include <sdkddkver.h>#include <iostream>#include <WinSock2.h>#include <Windows.h>#include <string> // TODO: mencionar aquí los encabezados adicionales que el programa necesita
diego.martinez:
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:
Navegación
Ir a la versión completa