/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- S E R V I D O R -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#include<ctype.h>
#define MYPORT 3490 // Puerto al que conectarán los usuarios
#define MAXBUFLEN 200 // Maximo de caracteres para el buffer
#define BACKLOG 10 // Conexiones pendientes en cola
#define MAX 100
int longitud;//LONGITUD DE LA CADENA ENTRADA
char salida[MAX];//SALIDA YA CONVERTIDA A LETRAS
char actual[MAX];//VALOR DEL NUMERO ACTUAL
char actualposterior[MAX];//VALOR DEL NUMERO POSTERIOR
char revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRAS
void num_letra(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANO
int sockfd; // El servidor escuchara por sockfd
int newfd; // las transferencias de datos se realizar mediante newfd
char buf[MAXBUFLEN];// buffer para recivir o enviar datos
struct sockaddr_in my_addr; // contendra la direccion IP y el numero de puerto local
struct sockaddr_in their_addr;//Contendra la direccion IP y numero de puerto del cliente
socklen_t sin_size;//Contendra el tamaño de la escructura sockaddr_in
char *token = NULL;
char vector [MAX];
int cont,loop,a;
void crear_socket();
void atributos();
void socket_name();
void escuchar();
void aceptar();
void recibir();
void enviar(char cadena[]);
void crear_socket()//se crea el medio por el cual se va a realizar la comunicación:
{
//AF_INET = Dominio donde se realiza la conexión.( unidos mediante una red TCP/IP).
//SOCK_STREAM = Uso del protocolo TCP
//0 = selecciona el protocolo más apropiado
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//Crea el socket y verifica si hubo algun error
{
}
}
void atributos() // Asignamos valores a la estructura my_addr para luego poder llamar a la funcion bind()
{
my_addr.sin_family = AF_INET; //Se sa un servidor Stream (Protocolo TCP)
my_addr.sin_port = htons(MYPORT); //se asigna el puerto por el que se va a escuchar (3490)
my_addr.sin_addr.s_addr = INADDR_ANY; // se usa la IP local
bzero(&(my_addr.sin_zero), 8); // rellena con ceros el resto de la estructura
}
void socket_name()//Le asignamos un nombre al socket, para recivir conexiones
{
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
}
}
void escuchar()// Habilitamos el socket para recibir conexiones, con una cola de 10 conexiones en espera como maximo (BACKLOG)
{
if (listen(sockfd, BACKLOG) == -1)
{
}
}
void aceptar()//accept = Se utiliza en el servidor, con un socket habilitado para recibir conexiones
{
sin_size = sizeof(struct sockaddr_in);
//Se espera por conexiones
if ((newfd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1)
{
exit(1); // Si se produce un error se finaliza el programa }
printf("server: conexion desde: %sn", inet_ntoa
(their_addr.
sin_addr)); }
void recibir()
{
if ((recv(newfd, buf, MAXBUFLEN, 0)) == -1)// buf = tipo de funcion a realizar
{
}
}
void enviar(char cadena[])
{
if (send(newfd, cadena, MAXBUFLEN, 0) == -1)//envia el resultado de la conversion de numero a letras
}
int main()//metodo principal
{
crear_socket();
atributos();
socket_name();
escuchar();
while(1) // ciclo para llamar accept
{
cont=0;
// Llamamos a fork() para crear un proceso hijo que atendera a la conexion recien establecida
aceptar();
if (!fork())
{
//comienza el proceso hijo y enviamos los datos mediante newfd
recibir();//el servidor recive que tipo de funcion tiene que realizar
int a;
if (strcmp (buf
,"1") == 0)//1 = InitCap {
cont=0;//cuenta las lineas que va recibiendo el servidor
send(newfd, "", 1, 0);//+++++++++
recibir();// se recibe la cantidad de lineas que tiene el archivo que abrió el cliente
printf("lineas a procesar: %sn",buf
); loop
= atoi(buf
);//loop tiene la cantidad de lineas que tiene el archivo que abrió el clientesend(newfd, "", 1, 0);//+++++++++
while(cont < loop)//el ciclo se repite el numero de lineas que tenga el archivo enviado por el cliente
{
cont++;//aumenta el contador de lineas
recibir();//se reciben las lineas
/* AQUI NECESITO COGER LOS NUMEROS PASARLOS A UN VECTOR
CUANDO HAYA PASADO TODAS LAS LINEAS Y TENGA TODOS LOS NUMEROS ORDENAR EL VECTOR*/
}
/*ESTO ORDENA EL VECTOR*/
int temp;
int j;
for(i=0; i<(a-1); i++) {
for (j=i+1; j<a; j++) {
if(vector[j]<vector[i]) {
temp=vector[j];
vector[j]=vector[i];
vector[i]=temp;
}
}
}
/* AQUI DEBO ENVIAR EL VECTOR AL CLIENTE SEPARANDO LOS NUMEROS POR ;*/
close(newfd);
}
close(newfd);
}
}