Sockets en Windows - Modelo Cliente/Servidor Datagram Sockets |
|
|
|
Escrito por adrianvaca
|
Domingo, 20 de Marzo de 2011 19:28 |
Página 5 de 5
Servidor Socket:
|
#include <stdio.h> #include <windows.h>
#define MAXBUFLEN 512 #define PORT 4950
char RecvBuff[MAXBUFLEN];
int main(int argc, char *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_DGRAM, 0); if(conn_socket==INVALID_SOCKET) { printf("Error al crear socket\n"); getchar();WSACleanup();return WSAGetLastError(); } memset(&server, 0, sizeof(server)) ; memcpy(&server.sin_addr, hp->h_addr, hp->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 *)&server, sizeof(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_socket, RecvBuff, MAXBUFLEN, 0, (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 argc, char *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_DGRAM, 0); if(conn_socket==INVALID_SOCKET) { printf("Error al crear socket\n"); getchar();WSACleanup();return WSAGetLastError(); } memset(&server, 0, sizeof(server)) ; memcpy(&server.sin_addr, hp->h_addr, hp->h_length); server.sin_family = hp->h_addrtype; server.sin_port = htons(PORT);
// Se envían los datos resp=sendto(conn_socket, SendBuff, MAXBUFLEN, 0,(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 |
Comentarios
Primero el servidor luego el cliente
Suscripción de noticias RSS para comentarios de esta entrada.