Sockets en windows

Páginas: 9 (2093 palabras) Publicado: 12 de octubre de 2010
1.-Introducción
Al final me he decidido a escribir el tutorial sobre winsock, espero que os guste.
En éste tutorial vamos a introducirnos en el mundo de los sockets en c para windows,
para hacerlo fácil voy a explicar sólo las conexiones tcp/ip.
Supongo que ya lo sabrás pero por si acaso decir que en una conexión a través de internet (o en lan,
da igual) conectarán dos pcs, para ellonecesitan dos parametros, el primero es la ip que sería
cómo la dirección de tu casa y el otro el puerto que sería con quien quiere hablar dentro de la casa:
con la mula, con el messenger, con el internet explorer...

Para ello uno de los dos ordenadores tiene que estar escuchando y esperando a que alguien conecte,
a este ordenador se le llama el servidor, y al que conecta se le llama el cliente.Cuando cliente y servidor han conectado ya pueden recibir o enviar datos sin preocuparse de nada mas
hasta que se cierre la conexión.

Bueno dejemos las explicaciones by barrio sésamo y vamos a lo que interesa.

2.-Funciones de winsock
Aquí intentaré explicar todas las funciones que vamos a utilizar en el programa. Si vas a programar
un servidor, solo necesitas las funciones2.01,2.02,2.04,2.06,2.07,2.08,2.09 y 2.09 y si vas a
programar un cliente necesitas entender las 2.01,2.02,2.03,2.04,2.05,2.09 y 2.10.

2.01.-WSAStartup
Esta función lo que hace es inicializar el winsock en nuestro programa y definir la versión que
vamos a utilizar, lo que cambia entre versiones es que unas tienen mas funciones a usar y otras
menos, nosotros cómo vamos a lo básico sólo nos interesacompatibilidad y por tanto usaremos la
version 2.0 que viene con todos los windows
Para ello haremos lo siguiente:

Definimos una variable para la inicializacion
WSADATA wsa;

Inicializamos determinando la versión 2.0 para ello usamos MAKEWORD que pasará ese 2.0 a una
variable de tipo WORD (16bits) que es lo que pide la función. También pasamos wsa por referéncia
para que la modifique.WSAStartup(MAKEWORD(2,0),&wsa);

2.02.-socket
Con la funcion socket lo que hacemos es crear un socket (una conexión para que se entienda)
definiendo el protocolo de la conexión y el tipo de información que se trasmitirá a través de él.

definimos un socket
SOCKETsock;

Creamos el socket de tipo AF_INET (protocolo ipv4), SOCK_STREAM (tipo de paquetes para tcp),
IPPROTOTCP (protocolo tcp).sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

2.03.-gethostbyname
Con gethostbyname lo que hacemos es resolver un dominio cómo podría ser www.google.com,
irc.irc-hispano.org, mazard.no-ip.org... a la ip que le corresponde, así luego podremos
conectar.

Definimos una estructura del tipo hostent, esta estructura guardará toda la información a
bajo nivel sobre el host al que vayamos a conectar.Si a gethostbyname le pasamos una ip
directamente no la resolverá y la asignará a direc correctamente.

structhostent *direc;

Ahora resolvemos el nombre del host y se lo asignamos a la direccion.
direc=gethostbyname("www.google.es");

Nota: Si no quisieramos resolver el nombre de dominio podriamos usar la función inet_addr
para transformar la ip de cadena de caracteres a una variable detipo in_addr. Pero es
mejor utilizar esta función siempre, tiene la misma utilidad que in_addr y además te resuelve
nombres de dominio.

2.04.-htons
Con esta funcion guardaremos el puerto al que vamos a conectar mas adelante.
En el protocolo de red los puertos no se expresan igual que los expresamos nosotros, no entraremos
en detalles pero si tienes curiosidad busca bigendian, littleendiano tcp/ipnetwork byte order
en google.

ununsigned short se ajusta exactamente al rango en el que pueden ir los puertos, desde 1 hasta
65535.
u_short puerto;

Así transformamos el puerto 9999 "al lenguaje que entenderá" el socket.
puerto=htons(9999);

2.05.-connect
Con esta función conseguiremos conectar con la máquina remota, esta es la parte mas delicada,
intentaré explicarla lo...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Sockets
  • sockets
  • sockets
  • Sockets
  • Sockets
  • Sockets
  • Sockets
  • Comunicacion entre sOCKETS

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS