En el cliente nunca le asignas ningún contenido a la variable Buffer, de esta manera:
Cliente:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
#define PORT 9999
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
int Error()
{
std::cout << "Error " << GetLastError() << std::endl;
getchar();
return 0;
}
int main(void)
{
if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
{
Error();
}
Remote_Server.sin_family = AF_INET;
Remote_Server.sin_port = htons(PORT);
Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
if(Conexion == INVALID_SOCKET)
{
Error();
}
char buffer[] = "Hola";
send(Client,buffer,strlen(buffer),0);
return 0;
}
Y lo recibes mal no le puedes hacer strlen() a Buffer
Servidor:
#include "windows.h"
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
#define PORT 9999
WSADATA wsa;
SOCKET Client;
int Conexion;
sockaddr_in Remote_Server;
int Error()
{
std::cout << "Error " << GetLastError() << std::endl;
getchar();
return 0;
}
int main(void)
{
if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
{
Error();
}
Remote_Server.sin_family = AF_INET;
Remote_Server.sin_port = htons(PORT);
Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
listen(Client,10);
accept(Client,NULL,NULL);
char *Buffer = (char*)malloc(5);
while(true)
{
memset(Buffer, 0, 5);
recv(Client,Buffer,4,0);
if(!strcmp(Buffer,"Hola"))
{
break;
}
}
std::cout << Buffer <<std::endl;
getchar();
free(Buffer);
return 0;
}
PD: Recuerda que strcmp() devuelve 0 si las cadenas son iguales.