te posteo el codigo del mio (practicamente copiado del libro developer´s guide)
pero si te lias, mandame tu direccion y te lo mando por correo.
Hay un cliente y un servido:CLiente:
--------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define MARCA_COMANDO '!'
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ConnectButtonClick(TObject *Sender)
{
MySocket->Address =ServerEdit->Text;
MySocket->Port =PortEdit->Text.ToIntDef(1971);
MySocket->Active =true;
ConnectButton->Enabled =false;
DisconnectButton->Enabled =true;
MemoOut->Enabled =true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DisconnectButtonClick(TObject *Sender)
{
MySocket->Active =false;
ConnectButton->Enabled =true;
DisconnectButton->Enabled =false;
MemoOut->Enabled =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MySocketConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
MemoIn->SetFocus();
MemoIn->Lines->Add("Connected ...");
MemoOut->SetFocus();
MySocket->Socket->SendText(Format("UserName=%s ",
OPENARRAY(TVarRec,
(UserNameEdit->Text))));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MemoOutKeyPress(TObject *Sender, char &Key)
{
if(Key ==VK_RETURN)
{
MySocket->Socket->SendText(MemoOut->Text);
MemoOut->Lines->Clear();
Key =0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MySocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString s =Socket->ReceiveText();
if(s[s.Length()]!='!')
{
MemoIn->SetFocus();
//MemoIn->Lines->Add(Socket->ReceiveText());
MemoIn->Lines->Add(s);
MemoOut->SetFocus();
}
else
{
Label1->Caption=Socket->ReceiveText();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MemoOutDragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
// MySocket->Socket->SendText("intento de enviar fichero..\n");
// MySocket->Socket->SendStream(((TFileStream *)Source));
// MySocket->Socket->SendText("fin de intento de enviar fichero..\n");
// MemoOut->Lines->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MemoOutDragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
ShortString s = Source->ClassName();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
ShortString s = Source->ClassName();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
ShortString s = Source->ClassName();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Nuevo_Manejador(TMessage &m)
{
if(m.Msg==WM_DROPFILES)
{
//devuelve el nº de ficheros
int n_ficheros = DragQueryFile((HDROP)m.WParam,//HDROP hDrop: handle to structure for dropped files
0xffffffff, //UINT iFile: index of file to query
(LPSTR)NULL, //LPTSTR lpszFile: buffer for returned filename
NULL); //UINT: cch
if(n_ficheros !=1)
{
ShowMessage("solo funciono con un fichero");
m.Result=0;
return;
}
//devuelve la longitud del nombre
int nombre_long = 1+DragQueryFile((HDROP)m.WParam,
0,
NULL,
NULL);
//obtener el nombre
char *nombre= new char[nombre_long];
DragQueryFile((HDROP)m.WParam,
0,
nombre,
nombre_long);
//carga el fichero
//
//
ButtonSendFichero->Enabled=true;
TFileStream *s=new TFileStream(nombre,fmOpenRead);
MySocket->Socket->SendStream(s);
//MySocket->Socket->SendBuf(nombre+MARCA_COMANDO);
MemoOut->Lines->LoadFromFile(nombre);
MySocket->Socket->SendText(MemoOut->Text);
MemoOut->Lines->Clear();
delete [] nombre;
//finaliza
DragFinish((HDROP)m.WParam);
m.Result = 0;
return;
}
Viejo_Manejador(m);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DragAcceptFiles(MemoOut->Handle,true);
Viejo_Manejador= MemoOut->WindowProc;
MemoOut->WindowProc=Nuevo_Manejador;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonLimpiarClick(TObject *Sender)
{
MemoIn->Lines->Clear();
}
//---------------------------------------------------------------------------
/*
**poner
**
**
**
**
*/
void __fastcall TForm1::ButtonSendFicheroClick(TObject *Sender)
{
}
//---------------------------------------------------------------------------
SErvidor
--------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "server.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ConnectedList = new TStringList();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartButtonClick(TObject *Sender)
{
MyServer->Port =PortEdit->Text.ToIntDef(1971);
Caption =MyServer->Port;
MyServer->Active =true;
StopButton->Enabled =true;
StartButton->Enabled =false;
PortEdit->Enabled =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StopButtonClick(TObject *Sender)
{
MyServer->Active =false;
StartButton->Enabled =true;
StopButton->Enabled =false;
PortEdit->Enabled =true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyServerClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
LogMemo->Lines->Add(Socket->RemoteAddress +" has connected..");
ConnectedList->AddObject(Socket->RemoteAddress,Socket);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyServerClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
LogMemo->Lines->Add(Socket->RemoteAddress +" has disconnected..");
SendMessage(Format("%s has disconnected.",
OPENARRAY(TVarRec,
(ConnectedList->Strings [ConnectedList->IndexOfObject(Socket)]))),
"Server ");
ConnectedList->Delete(ConnectedList->IndexOfObject(Socket));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SendMessage(AnsiString aMessage,AnsiString aFrom)
{
for(int i=0;i<MyServer->Socket->ActiveConnections;i++)
{
if(aFrom =="Server ")
MyServer->Socket->Connections [i ]->
SendText(Format("%s ",OPENARRAY(TVarRec,(aMessage))));
else
MyServer->Socket->Connections [i ]->
SendText(Format("%s said:%s ",OPENARRAY(TVarRec,(aFrom,aMessage))));
}
}
void __fastcall TForm1::MyServerClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString TextIn,CurrentName;
int iIndex;
TextIn =Socket->ReceiveText();
iIndex =ConnectedList->IndexOfObject(Socket);
if(iIndex ==-1)
return;
TStringList *UserName =new TStringList();
if(TextIn.Pos("UserName=")==1)
{
//Set User Name
UserName->Text =TextIn;
ConnectedList->Strings [iIndex ] ==UserName->Values ["UserName "];
SendMessage(Format("%s has connected.",
OPENARRAY(TVarRec,
(UserName->Values ["UserName "]))),"Server ");
}
else
{
//Send Message
CurrentName =ConnectedList->Strings [iIndex ];
SendMessage(TextIn,CurrentName);
}
delete UserName;
}
//---------------------------------------------------------------------------