Ja koristim besplatni Indy set komponenti:
http://www.indyproject.org/
... koji se može koristiti uz puno okruženja.
Imaju i "jak" NNTP forum:
news.atozedsoftware.com
Evo ti jedan primer koji sam ranije sklepao, kada KLIJENT pita SERVER koliko
je sati i od njega dobije odgovor (tek da osetis princip):
Ima i attachment.
BCB verzija:
--- KLIJENT ---
Code:
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TIndyClientForm *IndyClientForm;
__fastcall TIndyClientForm::TIndyClientForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TIndyClientForm::AskButtonClick(TObject *Sender)
{
AskButton->Enabled = false;
try
{
// CONNECTING
IdTCPClient->Connect();
// PREPARING REQUEST
AnsiString REQUEST = "Can you please tell me what's the time?";
Memo->Lines->Add( REQUEST + " (prepared)" );
// SENDING TASKS
IdTCPClient->WriteInteger( REQUEST.Length() );
IdTCPClient->Write( REQUEST );
Memo->Lines->Add( REQUEST + " (sent)" );
// RECEIVING TASKS
int BytesToRead = IdTCPClient->ReadInteger();
AnsiString RESPONSE = IdTCPClient->ReadString( BytesToRead );
Memo->Lines->Add( RESPONSE );
}
__finally
{
IdTCPClient->Disconnect();
AskButton->Enabled = true;
}
}
void __fastcall TIndyClientForm::IdTCPClientStatus(TObject *axSender,
const TIdStatus axStatus, const AnsiString asStatusText)
{
Caption = asStatusText;
}
--- SERVER ---
Code:
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include <StrUtils.Hpp>
#pragma package(smart_init)
#pragma resource "*.dfm"
TIndyServerForm *IndyServerForm;
__fastcall TIndyServerForm::TIndyServerForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TIndyServerForm::IdTCPServerExecute(TIdPeerThread *AThread)
{
// RECEIVING TASKS ...
int BytesToRead = AThread->Connection->ReadInteger();
AnsiString REQUEST = AThread->Connection->ReadString( BytesToRead );
Memo->Lines->Add( REQUEST + " (received)" );
// PROCESSING & PREPARING ANSWER TASKS ...
AnsiString RESPONSE = FormatDateTime( "hh:mm AM/PM", Now() );
Memo->Lines->Add( RESPONSE + " (prepared)" );
// SENDING TASKS ...
AThread->Connection->WriteInteger( RESPONSE.Length() );
AThread->Connection->Write( RESPONSE );
Memo->Lines->Add( RESPONSE + " (sent)" );
}
void __fastcall TIndyServerForm::IdTCPServerStatus(TObject *axSender,
const TIdStatus axStatus, const AnsiString asStatusText)
{
Caption = asStatusText;
}