/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Programando Sockets 4to Tema... Ejemplo para Windows Simple

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Diabliyo



Registrado: 14 Abr 2004
Mensajes: 317
Ubicación: En la Luna

MensajePublicado: 21/12/2006 10:11 am
Título: Programando Sockets 4to Tema... Ejemplo para Windows Simple

Hola:

Este ejemplo es basandome en mi codigo anterior que funciona solo para Sistemas Linux y compilador gcc, aki el link al post anterior:

----> http://www.elrincondelc.com/portal/modules.php?name=Forums&file=viewtopic&t=2085 <----

Este es el nuevo codigo pero utilizandolo para Windows 98/XP/2000/2003 y compilador Dev C++.

Antes de poner el codigo, debemos saber COMO linkear la libreria del socket y acomodar el codigo.

Los Pasos son los Siguientes:

1- Abrimos Dev C++.
2- File >> New Project y escojemos: Empty Project.
3- Del lado IZQUIERDO Click Derecho en Project1 y New File.
4- Pegamos el codigo que les podre mas abajo.
5- Vamos a la pestana: Project >> Project Options.
6- En la nueva ventana que aparece nos vamos a la pestana Parameters y Pulsamos el boton Add Library or Objet.
7- Buscamos la libreria libws2_32.a que esta ubicada en: C:\Dev-Cpp\lib\
8- Compilamos y Ejecutamos !!!

byee
_________________



Ultima edición por Diabliyo el 21/12/2006 10:16 am; editado 2 veces
Volver arriba
Diabliyo



Registrado: 14 Abr 2004
Mensajes: 317
Ubicación: En la Luna

MensajePublicado: 21/12/2006 10:13 am
Título:

Código:

/*
Programa Servidor que Abre el Socket 15005

Ahora abre una ventana de TELNET y conecta asi:

Si eres una makina de la RED, solo conectate desde TELNET a la IP donde esta activado o corriendo el Servidor
Si eres el mismo Servidor, solo tipea tu IP loopback que por lo general es: 120.0.0.1 o localhost   ;)

Coder: Diabliyo
e-mail:
Nacionalidad: Reynosa, Tamaulipas, Mexico ;)
Codigo: socket_Diabliyo.c
Requisitos: Sistema
*/

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock2.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

#pragma comment(lib, "ws2_32.lib");

#define BACKLOG 5
#define N 150
#define PORT 1616

/*Prototipos*/
int servidor_socket( int sockds );
int cliente_socket( int sockds_c, int sockds );
int recivir( char *buf, int sockds );
int enviar( char *cad, int cliente );
void chat_enviar( int i, int sockds, int sockds_max, fd_set registro, char *buf );

void chat_enviar( int i, int sockds, int sockds_max, fd_set registro, char *buf )
   {
   int j;
      
   for( j=0; j<=sockds_max; j++ )
      {
      if( FD_ISSET( j, ®istro ) )
         {
         if( j!=sockds && j!=i )
            {
            if( enviar( buf, j ) == -1 )
               {
               perror( "send" );
               getchar();
               }
            }
         }
      }
   }

int enviar( char *cad, int cliente )
   {
   int bytes_n, size_c;
      
   size_c= strlen( cad );
   bytes_n= send( cliente, cad, size_c, 0 );
   return bytes_n;
   }

int recivir( char *buf, int sockds )
   {
   int bytes_n;
   
   bytes_n= recv( sockds, buf, N, 0 );
   buf[bytes_n]='\0';
   return bytes_n;
   }

int cliente_socket( int sockds_c, int sockds )
   {
   int size_c=0;
   struct sockaddr cliente;
   
   size_c= sizeof( struct sockaddr );
   if( ( sockds_c= accept( sockds, &cliente, &size_c ) ) == -1 )
      {
      perror( "accept" );
      getchar();
      return -1;
      }
   printf( "\nNueva conexion establecida ID: %i", sockds_c );
   return sockds_c;
   }

int servidor_socket( int sockds )
   {
   struct sockaddr_in servidor;

   servidor.sin_family= AF_INET;
   servidor.sin_port= htons( PORT );
   memset( &(servidor.sin_zero), '\0', 8 );
   servidor.sin_addr.s_addr= inet_addr( "127.0.0.1" );
   //inet_aton( "127.0.0.1", &(servidor.sin_addr) );
   
   if( ( sockds= socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
      {
      perror( "socket" );
      getchar();
      return -1;
      }
      
   if( bind( sockds, (struct sockaddr *)&servidor, sizeof(struct sockaddr) ) == -1 )
      {
      perror( "bind" );
      getchar();
      return -1;
      }
      
   if( listen( sockds, BACKLOG ) == -1 )
      {
      perror( "listen" );
      getchar();
      return -1;
      }
   return sockds;
   }

int main()
   {
   fd_set registro, registro_aux;
   int sockds, sockds_c, sockds_max, i, j, bytes_n;
   char buf[N];
 
   FD_ZERO( ®istro );
   FD_ZERO( ®istro_aux);
   
   WSADATA WSAData;
    WSAStartup(MAKEWORD(1,1), &WSAData);
      
   if( ( sockds= servidor_socket( sockds ) ) == -1 )
      exit(1);
   
   FD_SET( sockds, ®istro ); /*Agregamos el socker principal al registro*/
   sockds_max= sockds; /*el contador de Descriptores de Sockets ( sockds_max ) guarda el contenido del descriptor principal ( sockds )*/
   for(;;)
      {
      registro_aux= registro; /*hacemos copia del registri principal, en "registro_aux"*/
      if( select( sockds_max+1, ®istro_aux, NULL, NULL, NULL ) == -1 )
         {
         perror( "select" );
         getchar();
         exit(1);
         }
      for( i=0; i<=sockds_max; i++ )
         {
         if( FD_ISSET( i, ®istro_aux ) )
            {
            if( i==sockds )
               {
               if( ( sockds_c= cliente_socket( sockds_c, sockds ) ) == -1 )  /*Acepta la conexion del cliente*/
                  exit(1);
               else
                  {
                  FD_SET( sockds_c, ®istro ); /*Agrega el descriptor del cliente al registro*/
                  if( sockds_c>sockds_max )   sockds_max= sockds_c; /*Checa y actualiza el contador de descriptores ( sockds_mx )*/
                  chat_enviar( sockds, sockds, sockds_max, registro, "-------- Conexion Recivda -------\n" );
                  }
               }
            else
               {
               if( ( bytes_n= recivir( buf, i ) ) <=0 )
                  {
                  switch( bytes_n )
                     {
                     case 0:
                        printf( "\n\nEl Cliente %i Cerro la Conexion.", i );
                        chat_enviar( sockds, sockds, sockds_max, registro, "-------- Se ha Desconectado --------\n" );
                        break;
                     case -1:
                        perror( "recv" );
                        getchar();
                        break;
                     }
                  close(i);
                  FD_CLR( i, ®istro );
                  }
               else
                  chat_enviar( i, sockds, sockds_max, registro, buf );
               }
            }
         }
      }
   printf( "\n\nPulsa para salir...." );
   getchar();
   close(sockds);
   return 0;
   }

_________________

Volver arriba
kammuz



Registrado: 16 Jun 2006
Mensajes: 203
Ubicación: aca a la vuelta

MensajePublicado: 21/12/2006 12:18 pm
Título: bue

muy bueno.. era justo para mi, el como compilarlo en dev c++ muchas gracias ...... y no creo q tengas problemas en resolver dudas que e me ocurran con rspecto al tema no¿?
desde ya uchas gracias!
Volver arriba
Diabliyo



Registrado: 14 Abr 2004
Mensajes: 317
Ubicación: En la Luna

MensajePublicado: 21/12/2006 1:15 pm
Título: Re: bue

kammuz escribió:
muy bueno.. era justo para mi, el como compilarlo en dev c++ muchas gracias ...... y no creo q tengas problemas en resolver dudas que e me ocurran con rspecto al tema no¿?
desde ya uchas gracias!


Cualquier duda para eso estamos compare jejejej Very Happy !!!!

bye bye
_________________

Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com