El código del main es este:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <process.h>
int main(int argc, char *argv[])
{
/* Variables para la apertura de socket */
SOCKET sock;
int len=0;
char Buffer[1024];
/* Llamada a función abrir socket */
abrir_socket(&sock, &len);
/* Una vez conectada una persona, abrimos sockets dependiendo de cuantos más
se conecten */
_beginthread(subproceso(), 0, NULL);
while(len!=0) //mientras estemos conectados con el otro pc
{
len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if(len>0) //si seguimos conectados
{
Buffer[len]=0; //le ponemos el final de cadena
printf("Texto recibido:%s",Buffer); //imprimimos la cadena recibida
}
}
}
La función abrir socket:
Código:
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
void abrir_socket(SOCKET* variable1, int* variable2)
{
/* Declaración de variables a usar */
WSADATA wsa;
struct sockaddr_in local;
SOCKET sock;
int len;
/* Igualación de punteros */
sock=*variable1;
len=*variable2;
//Inicializamos
WSAStartup(MAKEWORD(2,0),&wsa);
//Creamos el socket
sock=socket(AF_INET,SOCK_STREAM,0);
//defnimos dirección por defecto, ipv4 y el puerto 9999
local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons(9999);
//asociamos el socket al puerto
if(bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
{
printf("Error en el bind\n");
getch();
exit(1);
}
//ponemos el socket a la escucha
if(listen(sock,1)==-1)
{
printf("Error en el listen\n");
exit(1);
}
len=sizeof(struct sockaddr);
//hay una conexión entrante y la aceptamos
sock=accept(sock,(SOCKADDR*)&local,&len);
/* Igualación de variables para su posterior devolución */
*variable1=sock;
*variable2=len;
}
La función para crear un subproceso:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <process.h>
void subproceso(void)
{
/* Declaración de variables para el hijo */
SOCKET sock;
int len=0;
char Buffer[1024];
abrir_socket(&sock, &len);
while(len!=0) //mientras estemos conectados con el otro pc
{
len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if(len>0) //si seguimos conectados
{
Buffer[len]=0; //le ponemos el final de cadena
printf("Texto recibido:%s",Buffer); //imprimimos la cadena recibida
}
}
_endthread();
}
P.D.: Por si a alguien le resulta infumable leer todo esto, estoy programando en Dev-C++ así que el proyecto entero está aquí: http://www.deseos.ws/chat.zip