Professional Documents
Culture Documents
Abstract
Este reporte contiene informacin sobre la programacin de un servidor en lenguaje c utilizando un compilador del
entorno Windows el cual ser trasladado a UNIX en linux con distribucin de Ubuntu. El cual incluye informacin del uso
y manejo de sockets para la conexin mediante TCP entre 2 SO con diferente arquitectura.
1. Introduccin
Con este reporte pretende darse a conocer la bitcora de la programacin de un servidor en lenguaje
C, el cual deber hacer conexin con un cliente programado en c# el cual debe funcionar en el SO Windows y
posteriormente lograr una conexin entre alguna distribucin de Linux y OSX.
Este proyecto fue divido en dos partes, separando de la misma manera el grupo completo, teniendo as una
parte programando en c y la otra parte en c# para de esta forma llegar a un producto final el cual ser la
conexin que deberemos establecer con la pareja que nos haya tocado. Cabe aclarar que este reporte pertenece
solo a la parte de programacin en C.
Este programa correr en un equipo con las siguientes especificaciones:
HP Pavilion dm4
SO Windows 8.1 64bits (Ubuntu 14.10 64bits para el programa corriendo en Linux)
RAM de 6gb
HDD de 750 gb
Procesador Intel Core i5-2450M CPU @ 2.50Hz
Para llevar a cabo este programa necesitamos de cierto software y recursos extra en caso de no haberlos tenido
ya instalados en el equipo de trabajo. Como compilador para Windows utilizamos DevC++ para llevar a cabo
el revisado y desarrollo del programa, adems de instalar una librera especial diseada para la manipulacin
de sockets y poder as hacer conexin y comunicacin con el cliente.
Esta librera est disponible en la mayora de los ordenadores actuales sin embargo es posible que no est
instalada en algunos. En nuestro caso no fue necesario hacer la instalacin ni del compilador ni de la librera
puesto que en semestres pasados ya habamos utilizado el compilador para trabajos o proyectos referentes al
semestre y la librera ya se encontraba disponible en la laptop utilizada para hacer los programas.
Para la parte de conexin con UNIX ser utilizada la distribucin de Linux UBUNTU donde est SO tendr
alojado al Servidor programado en C para hacer la conexin con OSX que tendr alojados el cliente
programado en C#.
Como compilador utilizamos GCC para distribuciones de Linux, en esta distribucin tampoco fue necesario
instalar la librera de manejo de sockets ya que el SO ya trae precargada la misma.
2. Desarrollo
Como primera prctica debimos investigar sobre el manejo de sockets en Windows mediante la
librera winsock.h, la cual es la que permite la manipulacin de estos dentro del entorno de DevC++ adems
de los diferentes tipos de sockets que existen y los dominios que pueden manejar.
Para empezar a codificar deberemos crear un nuevo proyecto al cual le dimos el nombre de uici, para
la codificacin tomamos de base el cdigo que viene en el libro de Unix Programacin Prctica el cual nos
proporcion el maestro.
#include <stdio.h>
#include <stdlib.h>
#include "uici.h"
#define MAXBACKLOG 10
SOCKET sock;
{
int SOCKET; //descriptor de archivo del socket
struct sockaddr_in servidor;
int len = sizeof(struct sockaddr);
WSADATA w;
int error=WSAStartup(0x0202,&w);
if (error)
{
printf("No se puede inicializar el socket");
return FALSE;
}
if (w.wVersion!=0x0202);
{
printf("La version no es la correcta");
return FALSE;
}
do{
cc=recv(retval,buf,sizeof(buf),0);
if (cc==0) exit (0);
if(cc>0)
printf("\n %s dice %s",hostn,buf);
else
{
printf("\n %s esta desconectado",hostn);
closesocket(fd); break;
}
}while(1);
closesocket(fd);
retval= WSACleanup();
if(retval==SOCKET_ERROR)
{
printf("Error limpiando la libreria WinSock");
return -1;
}
return retval;
}
if (fd!=-1)
if(u_listen(fd,clienteremoto)!=-1);
getch();
return 0;
}
Cabecera:
Typedef unsigned short u_port_t;
int u_open (u_port_t port);
int u_listen (int fd, char *hostn);
ssize_t u_read(int fd, void *buf, size_t nbyte);
ssize_t u_write(int fd, void *buf, size_t nbyte);
{
printf ("No se puede abrir socket servidor\n");
exit (-1);
}
Socket_Cliente = Acepta_Conexion_Cliente (Socket_Servidor);
if (Socket_Servidor == -1)
{
printf ("No se puede abrir socket de cliente\n");
exit (-1);
}
Lee_Socket (Socket_Cliente, Cadena, 5);
printf ("Soy Servidor, he recibido : %s\n", Cadena);
if (Aux == -1)
{
switch (errno)
{
case EINTR:
case EAGAIN:
usleep (100);
break;
default:
return -1;
}
}
}
}
return Leido;
}
int Escribe_Socket (int fd, char *Datos, int Longitud)
{
int Escrito = 0;
int Aux = 0;
if (Aux == 0)
return Escrito;
else
return -1;
}
}
/* Devolvemos el total de caracteres leidos */
return Escrito;
}
#endif // SOCKET_H_INCLUDED
#endif // SOCKET_SERVIDOR_H_INCLUDED
MAKEFILE
all : Socket.o Socket_server.o server
CPPFLAGS = -g -I.
server : server.c
cc -g -I. Socket.o Socket_server.o server.c -o server
clean :
rm *.o server
References
Ttulo
Autores
Edicin
Editor
ISBN
N. de pginas
10