Cool C/C++

Programacion en C/C++

Home Tutoriales Programación C/C++ Sockets en Windows - Modelo Cliente/Servidor Datagram Sockets
Sockets en Windows - Modelo Cliente/Servidor Datagram Sockets PDF Imprimir E-mail
Escrito por adrianvaca   
Domingo, 20 de Marzo de 2011 19:28
Indice del artículo
Sockets en Windows
Introducción a los Sockets
Funciones de Sockets
Modelo Cliente/Servidor Streams Sockets
Modelo Cliente/Servidor Datagram Sockets
Todas las páginas


Servidor Socket:

#include <stdio.h>
#include <windows.h>

#define MAXBUFLEN 512
#define PORT 4950

char RecvBuff[MAXBUFLEN];

int main(int argcchar *argv[]){

  
WSADATA wsaData;
  
SOCKET conn_socket,comm_socket;
  
SOCKET comunicacion;
  
struct sockaddr_in server;
  
struct sockaddr_in client;
  
struct hostent *hp;
  
int resp,stsize;
  
  
//Inicializamos la DLL de sockets
  
resp=WSAStartup(MAKEWORD(1,0),&wsaData);
  if(
resp){
    
printf("Error al inicializar socket\n");
    
getchar();return resp;
  }
  
  
//Obtenemos la IP que usará nuestro servidor... 
  // en este caso localhost indica nuestra propia máquina...
  
hp=(struct hostent *)gethostbyname("localhost");

  if(!
hp){
    
printf("No se ha encontrado servidor...\n");
    
getchar();WSACleanup();return WSAGetLastError();
  }

  
// Creamos el socket...
  
conn_socket=socket(AF_INET,SOCK_DGRAM0);
  if(
conn_socket==INVALID_SOCKET) {
    
printf("Error al crear socket\n");
    
getchar();WSACleanup();return WSAGetLastError();
  }
  
  
memset(&server0sizeof(server)) ;
  
memcpy(&server.sin_addrhp->h_addrhp->h_length);
  
server.sin_family hp->h_addrtype;
  
server.sin_port htons(PORT);

  
// Asociamos ip y puerto al socket
  
resp=bind(conn_socket, (struct sockaddr *)&serversizeof(server));
  if(
resp==SOCKET_ERROR){
    
printf("Error al asociar puerto e ip al socket\n");
    
closesocket(conn_socket);WSACleanup();
    
getchar();return WSAGetLastError();
  }

  
// Se reciben los datos
  
stsize sizeof(struct sockaddr);
  
resp=recvfrom(conn_socketRecvBuffMAXBUFLEN0, (struct sockaddr *)&client, &stsize);
  if(
resp==SOCKET_ERROR){ 
    
printf("Error al recivir datos...\n");
    
closesocket(conn_socket);WSACleanup();
    
getchar();return WSAGetLastError();
  }
  
  
// Se visualiza lo recibido 
  
RecvBuff[resp] = '\0';
  
printf("Paquete proveniente de: %s\n",inet_ntoa(client.sin_addr));
  
printf("Longitud del paquete en bytes: %d\n",resp);
  
printf("El paquete contiene:\n\n%s\n",RecvBuff);
  
  
getchar();
  
// Cerramos el socket de comunicacion
  
closesocket(conn_socket);
  
  
// Cerramos liberia winsock
  
WSACleanup();
  return (
EXIT_SUCCESS);



Cliente socket:

#include <stdio.h>
#include <windows.h>

#define MAXBUFLEN 512
#define PORT 4950

char SendBuff[512]={
"Patricio Rey y Sus Redonditos de Ricota\n\n\
¡BANG! ¡BANG! ESTÁS LIQUIDADO (1989)\n\n\
Esa estrella era mi lujo\n\n\
¿Era todo? Pregunté.\n\
Soy un iluso.\n\
No nos dimos nada más,\n\
Sólo un buen gesto.\n\
Mordí el anzuelo una vez más.\n\
Siempre un iluso.\n\
Nuestra estrella se agotó\n\
Y era mi lujo.\n\
Ella fue por esa vez\n\
Mi héroe vivo, bah\n\
Fue mi único héroe\n\
En este lío.\n\
La más linda del amor\n\
Que un tonto ha visto soñar\n\
Metió mi rocanrol bajo este pulso.\n"
};

int main(int argcchar *argv[]){
  
  
WSADATA wsaData;
  
SOCKET conn_socket;
  
struct sockaddr_in server;
  
struct hostent *hp;
  
int resp;
  
  
//Inicializamos la DLL de sockets
  
resp=WSAStartup(MAKEWORD(1,0),&wsaData);
  if(
resp){
    
printf("Error al inicializar socket\n");
    
getchar();return -1;
  }

  
//Obtenemos la IP del servidor... en este caso
  // localhost indica nuestra propia máquina...
  
hp=(struct hostent *)gethostbyname("localhost");

  if(!
hp){
    
printf("No se ha encontrado servidor...\n");
    
getchar();WSACleanup();return WSAGetLastError();
  }

  
// Creamos el socket...
  
conn_socket=socket(AF_INET,SOCK_DGRAM0);
  if(
conn_socket==INVALID_SOCKET) {
    
printf("Error al crear socket\n");
    
getchar();WSACleanup();return WSAGetLastError();
  }
   
  
memset(&server0sizeof(server)) ;
  
memcpy(&server.sin_addrhp->h_addrhp->h_length);
  
server.sin_family hp->h_addrtype;
  
server.sin_port htons(PORT);

  
// Se envían los datos
  
resp=sendto(conn_socketSendBuffMAXBUFLEN0,(struct sockaddr *)&server,sizeof(struct sockaddr));
  if(
resp==SOCKET_ERROR){ 
    
printf("Error al enviar datos...\n");
    
closesocket(conn_socket);WSACleanup();
    
getchar();return WSAGetLastError();
  }
    
  
// Visualizamos resultado...
  
printf("Enviados %d bytes hacia %s\n",resp,inet_ntoa(server.sin_addr));
  
getchar();
  
  
// Cerramos el socket y liberamos la DLL de sockets
  
closesocket(conn_socket);
  
WSACleanup();
  return 
EXIT_SUCCESS;





Última actualización el Domingo, 20 de Marzo de 2011 19:33
 
Otros artículos

Comentarios  

 
0 #3 adrianvaca 07-10-2015 17:01
Cito a sebas:
muy buen aporte, pero una pregunta para iniciar cual se inicia primero el cliente o el servidor por favor si me podrias ayudar con ese dato

Primero el servidor luego el cliente
Citar
 
 
0 #2 sebas 09-07-2015 20:24
muy buen aporte, pero una pregunta para iniciar cual se inicia primero el cliente o el servidor por favor si me podrias ayudar con ese dato
Citar
 
 
0 #1 Maxi 06-07-2011 14:40
muy bueno e interesante.
Citar
 

Escribir un comentario


Código de seguridad
Refescar