C/Visual C - No envia bien los datos este Socket!!!!

 
Vista:

No envia bien los datos este Socket!!!!

Publicado por Bettini (2 intervenciones) el 02/08/2007 15:25:52
Hola muy buenas, estoy trabajando con estos dos socket, servidor y cliente. Lo unico que tienen que hacer es mandar un numero el cliente al servidor y un saludo el servidor al cliente y luego que se visualice
El problema que tengo es que no llega bien lo que mando.
Si alguien supiera arreglar mi problema lo agradeceria.

Estos son los codigos
//Servidor.c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>
#define PUERTO 6000 // Puerto de conexion
#define IP "127.0.0.1"

int main()
{
WORD winsock; // Version del winsock
WSADATA datos; // Datos para inicializar winsock
SOCKET escucha; // Con este socket aceptamos conexiones entrantes
SOCKET comunicacion; // Con este socket enviamos y recibimos datos
struct sockaddr_in servidor; // Datos para la conexion
int tam_sockaddr=sizeof(struct sockaddr); // Bytes de la estructura sockaddr
//char num_enviado='k'; // Nº que enviaremos
int num_recibido; // Variable que almacenará el número que recibiremos

// Inicializamos winsock
winsock=MAKEWORD(1,1);//winsock bertsioa espezifikatzen du
if(WSAStartup(winsock, &datos))
printf("Error: Problemas al inicializar winsock \n");
else
{
// Creamos socket.
escucha=socket(AF_INET, SOCK_STREAM, 0);
if(escucha==-1)
printf("Error: Problemas al crear el socket \n");
else
{
// Cubrimos datos estructura sockaddr_in
servidor.sin_family=AF_INET;
servidor.sin_port=htons(PUERTO); // El puerto estará en Formato de Red
servidor.sin_addr.s_addr=inet_addr(IP); // La ip estará en formato long

// Asociamos ip y puerto al socket
if((bind(escucha, (struct sockaddr *)&servidor, sizeof(servidor)))==-1)
printf("Erro: Problemas al asociar puerto e ip al socket \n");
else
{
// Establecemos cola de clientes a 1
listen(escucha, 1);

// Aceptamos conexiones entrantes
printf("Esperando conexiones entrantes... \n");
comunicacion=accept(escucha, (struct sockaddr *)&servidor, &tam_sockaddr);

// Como no vamos a aceptar más conexiones cerramos el socket escucha
close(escucha);

// Enviamos el número y esperamos a recibir el número del cliente
printf("Enviando saludo... \n");
send (escucha, "Hello, world!", 14, 0);
printf("Recibiendo numero... \n");
recv (escucha, (void *)&num_recibido, sizeof(num_recibido), 0);
// Visualizamos resultado
printf("Numero enviado: HELLO WORLD!!! \n");
printf("Numero recibido: %d \n", num_recibido);

// Cerramos el socket de la comunicacion
closesocket(comunicacion);
}
}
// Cerramos liberia winsock
WSACleanup();
}

system("PAUSE");
return (EXIT_SUCCESS);
}

//Cliente.c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>
#define IP "127.0.0.1"
#define PUERTO 6000
#define MAXDATASIZE 100

int main(int argc, char *argv[])
{
WORD winsock;
WSADATA datos;
SOCKET comunicacion;
struct sockaddr_in servidor;
int estado_conexion;
int num,num_enviado=1;
char buf[MAXDATASIZE];

winsock=MAKEWORD(1,1);
if(WSAStartup(winsock, &datos))
printf("Error: Problemas al inicializar winsock \n");
else
{
comunicacion=socket(AF_INET, SOCK_STREAM, 0);
if(comunicacion==-1)
printf("Error: Problemas al crear el socket \n");
else
{
servidor.sin_family=AF_INET;
servidor.sin_port=htons(PUERTO);
servidor.sin_addr.s_addr=(inet_addr(IP));

estado_conexion=connect(comunicacion, (struct sockaddr *)&servidor, sizeof(servidor));
if(estado_conexion==-1)
printf("Error: No se puede conectar a \"%s\" \n", IP);
else
{
printf("Konektatu gara!!!!Servidorek bidaltzen uzten digu\n");

recv(comunicacion, buf, 14, 0);
send(comunicacion, (const char *)&num_enviado, sizeof(num_enviado), 0);
buf[15] = '\0'; //zenbat erakutsi elegitzeko

printf("Numero enviado: %d \n", num_enviado);

printf("Numero recibido: %s \n", buf);
}
close(comunicacion);
}

WSACleanup();
}

system("PAUSE");
return (EXIT_SUCCESS);
}

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder