Chat - Version C++ Builder
Presentación
C++ Builder es una de las mas poderosas herramientas que construyo Borland Inprise en sus buenos tiempos pues este compilador para Windows no solo es rápido sino que supera enormemente en utilidades, herramientas a gran cantidad de lenguajes programación de medio pelo como Basic, Fox, entre otros.
En lo que respecta al programa, lo escribí en C++ Builder 6.0, pero resulta que Delphi tambien es compatible con este pues ambos compilan codigo Pascal a fin de cuentas, asi que no importan realmente en que se desarrolle si Delphi o C++ Builder a las finales el resultado no varian entre ellos, pero nos servira para aprender un poco mas acerca de los Sockets y el protocolo TCP/IP que es con el que trabajan las clases TClientSocket y TServerSocket
El Protocolo TCP/IP
El Protocolo de Control de Transmisión ( Transmision Control Protocol ) el de mas fácil uso para aplicaciones en entornos internet e Intranet, pues este protocolo se basa en 4 niveles, y un monton de normas,... pero eso no es lo importante.
Lo que debes saber es que TCP/IP necesita de una conexión entre Servidor-Cliente de este modo puede comprobar si los paquetes que se envian llegan con integridad o no de modo que corrija los envios si tiene que hacerlo. Ademas de esto
Winsock API
( Windows Sockets Apllication Program Interface ) son librerias para los socket desarrollados en Berkley para el sitema operativo UNIX, los cuales posteriormente cobraron popularidad y se desarrollo tambien para Windows, y lo conocemos como Winsock o Sockets de Windows
Sockets
O Puntos de conexión, usualmente es un puerto escucha + una dirección I.P. luego viene el concepto de los clientes y el servidor o los servidores, bueno es todo lo basico que necesitas saber de los Sockets.
Chaski - Cliente/Servidor
Un programa cliente servidor consta de dos partes fundamentales Servidor, Cliente los cuales pueden estar desarrollados en cualquier lenguaje de programación, lo unico importante es que tienen que estar basados en cualquiera de los protocolos de de transmision de datos, ya sea TCP/IP (Transmision Control Protocol) o UDP/IP (User Datagram Protocol)
En nuestro ejemplo ambos modulos fueron desarrollados en C++ Builder 6 - pero testeamos el ejemplo que tenemos en Delphi que está publicado aqui,... la conexión y el intercambio de datos no difiere en nada, esto no por que el compilador sea Pascal, tambien lo testeamos con un progama Visual C++, y otro en Win32 con Dev-C++ y todo Ok. esto por que los Windows Sockets son un estandar para todos los compiladores para Windows.
El Servidor : TServerSocket
Para el servidor usamos el componente TServerSocket, que esta en la paleta Internet en ambos IDEs tanto Delphi como C++ Builder, cabe destacar que este componente esta completamente desarrollado asi que no tienes que preocuparte por la cantidad de clientes que conecten a tu servidor el componente se encarga de administrarlos, no es como en C++ que tienes que crearte una Lista enlazada o un template de listas o punteros a sockets, aqui solo usamos los componentes y no necesitas preocuparte por los detalles.
Esta funcion no solo deja listo el Socket Servidor, sino que alterna el mismo boton para que al presionarse por segunda vez se desactive el Servidor, aqui una técnica sencilla y algo de type_cast para C++. Ahora observa como se tiene que inicializar el ServerSocket, para que comienze a escuchar....
- Code: Seleccionar todo
//----------------------------------------------------------------
void __fastcall TChaskiServer::BtnCreateClick(TObject *Sender)
{
//. now we set clear the List
this->LstContacts->Items->Clear( );
//. now toggle the Button State
if( ( (TButton*)Sender )->Tag == 0 )
{
this->SockServer->Port = StrToInt( EdtPort->Text );
this->SockServer->Active = true;
this->EdtPort->Enabled = false;
this->EdtName->Enabled = false;
this->TmrRefresh->Enabled = true;
( (TButton*)Sender )->Caption = "Cerrar";
( (TButton*)Sender )->Tag = 1;
}
else
{
this->SockServer->Active = false;
this->EdtPort->Enabled = true;
this->EdtName->Enabled = true;
this->TmrRefresh->Enabled = false;
ChaskiConvers->Visible = false;
( (TButton*)Sender )->Caption = "Crear";
( (TButton*)Sender )->Tag = 0;
}
}
//----------------------------------------------------------------
El Cliente : TClientSocket
El cliente necesita un solo Socket para cumplir con la conexión, luego de que logre la conexión lo unico que debemos hacer el intervenir el evento Read, luego nos encargamos de leer el Packete que envia el servidor y usamos ReceiveText, y nada mas.
Para realizar la conexión observe el siguiente codigo
- Code: Seleccionar todo
//----------------------------------------------------------------
void __fastcall TChaskiConect::BtnConectClick(TObject *Sender )
{
//. Here handling the conect staments.
SockClient->Host = String( EdtHost->Text );
SockClient->Port = StrToInt( EdtPort->Text );
SockClient->Active = true;
this->PnlState->Visible = true;
}
//----------------------------------------------------------------
Cuando ejecutes el programa cliente, el server ya tendra que esta iniciado, y al mostrarle la siguiente ventana, entonces es importante que sepas la I.P. de la maquina en la que estas y si no lo sabes entonces deja los valores por defecto y click en Conectar.
Notas de Interés
Si no te funciona .... bueno, envíennos un E-mail a micrologic_software@yahoo.es y les daremos una solución alterna.
Acotaciones
MicroLogic©Software - Recomendations : Los programas que se otorgan pueden ser libremente copiados, cualquier consulta o duda con los programas o sobre los lenguajes, haganozla saber a nuestro correo micrologic_software@yahoo.es
MicroLogic©Software - Trabaja como parte integrante de F.I.L.I.C.C - (Fundacion para la Investigación de Lenguajes Informáticos y Ciencias de la Computación) Todo el Codigo es revisado y evaluado por F.I.L.I.C.C. Buscalos en la red en http://www.filicc.tk
Archivos Adjuntos
- Chaski_Src.zip46.39 KiB
Código Fuente del Proyecto - Chaski_Exe.zip537.27 KiB
Archivo compilado ejecutable (.exe)
Otros Artículos en esta sección
-
Presentamos una forma practica de manipulación de un Bitmap desde código fuente, no necesita de API, aquí te daremos una perspectiva para trabajar con BMPs y comprender su estructuraEn ese proyecto usaremos el control TTimer, que está en la paleta System, le asignaremos unos milisegundos para que invoque una función y simulará la animación.¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deProgramación »