CLIENTE / SERVIDOR EN C ++

Iniciado por rodri56, 27 Mayo 2014, 20:25 PM

0 Miembros y 1 Visitante están viendo este tema.

rodri56

ALGUIEN ME PODRIA AYUDAR CON ESTE TRABAJO.. PORFAVOR ME SERIA DE MUCHA AYUDAR .. EN CLASE ME DIERON ESTE PROGRAMA Y DIJERON K MODIFIKE LOS ERRORES .. :( SE ESTA TRABAJANDO EN DEV-C++
CLIENTE:
#include <winsock2.h>
#include <winsock.h>
//la cabezera para usar las funciones de winsock
#include <stdio.h>

int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct hostent *host;
   struct sockaddr_in direc;
   int conex;
   char Buffer[1024];
   int len;

   //Inicializamos
   WSAStartup(MAKEWORD(2,2),&wsa);

   //resolvemos el nombre de dominio localhost, esto se resolverá a 127.0.0.1
   host=gethostbyname("localhost");

   //creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   if (sock==-1)
   {
      printf("Error al crear el socket");
      return -1;
   }
   //Definimos la dirección a conectar que hemos recibido desde el gethostbyname
   //y decimos que el puerto al que deberá conectar es el 9999 con el protocolo ipv4
   direc.sin_family=AF_INET;
   direc.sin_port=htons(9999);
   direc.sin_addr = *((struct in_addr *)host->h_addr);
   memset(direc.sin_zero,0,8);

   //Intentamos establecer la conexión
   conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
   if (conex==-1)  //si no se ha podido conectar porque no se ha encontrado el host o no
                  //está el puerto abierto
   {
      printf("No se ha podido conectar\n");
      return -1;
   }

   printf("[enviar]\n");
   printf("[escribe el texto a enviar o 'salir' para salir  ]\n");

   while (len!=-1 && strcmp(Buffer,"salir")!=0) //mientras el socket no se haya desconectado
                                               //y no se escriba salir
   {
      printf("Texto a enviar:");
      fgets(Buffer,1023,stdin);  //pedir texto a enviar por pantalla
      len=send(sock,Buffer,strlen(Buffer),0); //enviar el texto que se ha introducido
   }
   return 0;
}

SERVIDOR:
#include <winsock2.h>
#include <winsock.h>
//la cabezera para usar las funciones de winsock
#include <stdio.h>
//#pragma comment(lib,"ws2_32.a")
int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct sockaddr_in local;
   int len=0;
   char Buffer[1024];

   //Inicializamos
   WSAStartup(MAKEWORD(2,0),&wsa);
   
   //Creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

   //defnimos dirección por defecto, ipv4 y el puerto 9999
   local.sin_family = AF_INET;
   local.sin_addr.s_addr = INADDR_ANY;
   local.sin_port = htons(9999);

   //asociamos el socket al puerto
   if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
   {
      printf("error en el bind\n");
      return -1;
   }

   //ponemos el socket a la escucha
   if (listen(sock,1)==-1)
   {
      printf("error en el listen\n");
      return -1;
   }
   
   len=sizeof(struct sockaddr);

   //hay una conexión entrante y la aceptamos
   sock=accept(sock,(SOCKADDR*)&local,&len);

   printf("[SERVIDOR]\n");
   printf("[Cuando se vaya recibiendo texto aparecera en pantalla    ]\n");

   while (len!=0) //mientras estemos conectados con el otro pc
   {
      len=recv(sock,Buffer,1023,0); //recibimos los datos que envie

      if (len>0)  //si seguimos conectados
      {
         Buffer[len]=0; //le ponemos el final de cadena
         printf("Texto recibido:%s",Buffer); //imprimimos la cadena recibida
      }
   }
   
   return 0;
}

AGRADECERIA SU AYUDA..!!

Eternal Idol

No se hacen tareas, lee las reglas del foro por favor.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón