Chat concurrente

Este programa es un chat concurrente (acepta varios clientes conectados a la vez) con una interfaz grafica basada en ncurses. La comunicacion es del tipo sockets TCP/IP.
				/////////////// FUNC.H
#define SENCILLA 1
#define DOBLE 0

void clrscr(void)
{
clear();
refresh();
return;
}

void gotoxy( int x, int y)
{
move(y,x);
return;
}

void wgotoxy(WINDOW *w, int x, int y)
{
wmove(w,y,x);
return;
}


void lineah(int x, int y, int x0, char car)
{
mvhline(y,x,car,x0-x);
refresh();
return;
}


void lineav(int x, int y, int y0,char car)
{
mvvline(y0,x,car,y0-y);
refresh();
return;
}


void rectangle(WINDOW *w,char car_h, char car_v)
{
box(w,car_v,car_h);
refresh();
return;
}


void outtextxy(int x, int y, int attr, char *string)
{
attrset(attr);
mvprintw(y,x,"%s",string);
attrset(0);
refresh();
}


WINDOW *window(int x, int y, int x0,int y0)
{
return(newwin(y0-y,x0-x,x,y));
}

void getmaxxy( int *x, int *y)
{
int auxx,auxy;
getmaxyx(stdscr,auxy,auxx);
*x=auxx;
*y=auxy;
return;
}




/////////////// CLIENTE.C
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <curses.h>
#include <ctype.h>
#include "func.h"


#define LINEA 20

void insertar_linea(void);
void escribir(char *);
void clear_areal(void);
int size (char *);
void insert(void);
int lectura(void);

int longitud;

int main(int argc, char *argv[])
{
int cs; // crear socket
int bufsize = 256;
char *buffer = malloc(bufsize);
char *buffer2 = malloc(bufsize);
char *buffer3 = malloc(bufsize);
char *msg = malloc(bufsize);
struct sockaddr_in address;
char name[24];
int salir=0,car;
int x,y,cont;
if (argc!=2){
printf("modo de empleo: cliente <direccion>");
exit(0);
}
if ((cs = socket(AF_INET,SOCK_STREAM,0)) > 0)
printf("Socket creadon");
address.sin_family = AF_INET;
address.sin_port = htons(15000);
inet_pton(AF_INET,argv[1],&address.sin_addr); //obtiene la dirección de la entrada
if (connect(cs,(struct sockaddr *)&address,sizeof(address)) == 0)
printf("La conexión fue aceptada con el servidor %s...n",inet_ntoa(address.sin_addr));
else {
printf("no se puede conectar con el servidor...");
exit(0);
}
initscr();
do{
clrscr();
outtextxy(20,3,A_BLINK," CHAT version: 1.0");
outtextxy(20,5,A_BLINK,"creado por: .");
outtextxy(15,12,A_BOLD,"Introduce tu Nickname: ");
mvscanw(12,40,"%s",name);
longitud=size(name);
}while(longitud>8);
clrscr();
noecho();
lineah(0,LINEA+1,79,'_');
strcpy(buffer,name);
strcat (buffer," ha entrado a la sala.");
send(cs,buffer,bufsize,0);
strcpy(msg,"");
cont=0;
salir=0;
clear_areal();
x=0;
y=LINEA+2;
keypad(stdscr,TRUE);
nodelay(stdscr,TRUE);
crmode();
do{
car=lectura();
if (car!=ERR){
if ((isgraph(car)|| car==' ') && cont<240){
gotoxy(x,y);
buffer[cont]=car;
addch(car);
cont++;
if (x==79){
x=0;
y++;
}
else x++;
}
else{
switch(car){
case KEY_BACKSPACE: if(x==0 && y!=LINEA+2){
x=79;
y--;
cont--;
gotoxy(x,y);
delch();
}
else
if(y!=LINEA+1){
--x;
cont--;
gotoxy(x,y);
delch();
}
break;
case KEY_UP: if (cont>0){
buffer[cont]='
Descargar adjuntos
COMPARTE ESTE TUTORIAL

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
TUTORIAL ANTERIOR

SIGUIENTE TUTORIAL