Cool C/C++

Programacion en C/C++

Home Tutoriales Programación C/C++ Sockets en Windows - Modelo Cliente/Servidor Streams Sockets
Sockets en Windows - Modelo Cliente/Servidor Streams 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>

char SendBuff[512],RecvBuff[512];

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_STREAM0);
  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(6000);

  
// 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();
  }

  if(
listen(conn_socket1)==SOCKET_ERROR){
    
printf("Error al habilitar conexiones entrantes\n");
    
closesocket(conn_socket);WSACleanup();
    
getchar();return WSAGetLastError();
  }
              
  
// Aceptamos conexiones entrantes
  
printf("Esperando conexiones entrantes... \n");
  
stsize=sizeof(struct sockaddr);
  
comm_socket=accept(conn_socket,(struct sockaddr *)&client,&stsize);
  if(
comm_socket==INVALID_SOCKET){
    
printf("Error al aceptar conexión entrante\n");
    
closesocket(conn_socket);WSACleanup();
    
getchar();return WSAGetLastError();
  }
  
printf("Conexión entrante desde: %s\n"inet_ntoa(client.sin_addr));
              
  
// Como no vamos a aceptar más conexiones cerramos el socket escucha
  
closesocket(conn_socket);
              
  
strcpy(SendBuff,"Hola Cliente... .P");
  
//Enviamos y recibimos datos...
  
printf("Enviando Mensaje... \n");
  
send (comm_socketSendBuffsizeof(SendBuff), 0);
  
printf("Datos enviados: %s \n"SendBuff);
  
  
printf("Recibiendo Mensaje... \n");
  
recv (comm_socketRecvBuffsizeof(RecvBuff), 0);
  
printf("Datos recibidos: %s \n"RecvBuff);
  
  
getchar();            

  
// Cerramos el socket de la comunicacion
  
closesocket(comm_socket);
  
  
// Cerramos liberia winsock
  
WSACleanup();
  return (
EXIT_SUCCESS);




Cliente socket:


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

char SendBuff[512],RecvBuff[512];

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_STREAM0);
  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(6000);

  
// Nos conectamos con el servidor...
  
if(connect(conn_socket,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR){
    
printf("Fallo al conectarse con el servidor\n");
    
closesocket(conn_socket);
    
WSACleanup();getchar();return WSAGetLastError();
  }
  
printf("Conexión establecida con: %s\n"inet_ntoa(server.sin_addr));
  
  
strcpy(SendBuff,"Hola servidor... .P");
  
//Enviamos y recibimos datos...
  
printf("Enviando Mensaje... \n");
  
send(conn_socket,SendBuff,sizeof(SendBuff),0);
  
printf("Datos enviados: %s \n"SendBuff);
  
  
printf("Recibiendo Mensaje... \n");
  
recv(conn_socket,RecvBuffsizeof(RecvBuff), 0);
  
printf("Datos recibidos: %s \n"RecvBuff);
  
  
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