Avatar billede clinton-2 Nybegynder
13. oktober 2001 - 19:51 Der er 4 kommentarer og
1 løsning

Start hjælp til programering af webserver i visual c++

Er der nogen der ligger inde med et stykke simpel source code til en webserver skrevet i c++. Eller kan skrive stammen af coden, så jeg selv kan lave den færdig, den skal nemlig passe til mit behov.

Tak!
Avatar billede cyberlsn Nybegynder
14. oktober 2001 - 17:09 #1
Det er da ikke så svært...
Her er et eksempel på et program, som håndtere cgi-script:

#include \"main.h\"
#include \"string.h\";
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource \"*.dfm\"

TCInfoModule *CInfoModule;
String ScriptName;

//---------------------------------------------------------------------------
__fastcall TCInfoModule::TCInfoModule(TComponent* Owner)
    : TWebModule(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TCInfoModule::RootHTMLTag(TObject *Sender, TTag Tag,
      const AnsiString TagString, TStrings *TagParams,
      AnsiString &ReplaceText)
{
  if ( TagString==AnsiString(\"MODULENAME\") )
    ReplaceText = ScriptName;

}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustInfoModCreate(
      TObject *Sender)
{
  char* filename = new char[MAX_PATH- 1];
  Customer->Open();
  BioLife->Open();
  GetModuleFileName(HInstance, filename,MAX_PATH-1);
  ScriptName = ExtractFileName(filename);
  delete[] filename;
}
//---------------------------------------------------------------------------
void __fastcall TCInfoModule::CustomerListHTMLTag(TObject *Sender,
      TTag Tag, const AnsiString TagString, TStrings *TagParams,
      AnsiString &ReplaceText)
{
  String Customers = \"\";
  if (CompareText(TagString, AnsiString(\"CUSTLIST\")) == 0)
  {
    Customers = \"\";
    Customer->First();
    while ( !( Customer->Eof ) )
    {
      Customers = Customers + \"<A HREF=/scripts/\" + ScriptName + \"/runquery?CustNo=\" +
                  CustomerCustNo->AsInteger + \">\" + CustomerCompany->AsString.c_str() +
                  \"</A><BR>\";
      Customer->Next();
    }
  }
  ReplaceText = Customers;
}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleCustomerlistAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  Response->Content = CustomerList->Content();
}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleQueryActionAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  TLocateOptions SearchOptions = SearchOptions<<(TLocateOption)NULL;
  if (Customer->Locate( AnsiString(\"CustNo\"),
                        Request->QueryFields->Values[AnsiString(\"CustNo\")],
                        SearchOptions))
  {
    CustomerOrders->Header->Clear();
    CustomerOrders->Header->Add(AnsiString(\"The following table was produced using a TDatasetTableProducer.<P>\"));
    CustomerOrders->Header->Add(AnsiString(\"Orders for: \" +
                    Customer->Fields->FieldByName(\"Company\")->Value));
    Response->Content = CustomerOrders->Content();
  }
  else
  {
    Response->Content = \"<html><body><b>Customer: \"
                        + Request->QueryFields->Values[AnsiString(\"CustNo\")]
                        + \" not found</b></body></html>\";
  }
}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleRedirectAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  Response->SendRedirect(AnsiString(\"http://www.inprise.com\"));
}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleGetImageAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  TJPEGImage *Jpg = new TJPEGImage();
  TMemoryStream *S = new TMemoryStream();
  TPicture *P = new TPicture();

  try
  {
    P->Assign(BioLifeGraphic);
    Jpg->Assign(P->Graphic);
    try
    {
      Jpg->SaveToStream(S);
      S->Position = 0;
      Response->ContentType = AnsiString(\"image/jpeg\");
      Response->ContentStream = S;
      Response->SendResponse();
    }
    __finally
    {
      &P->Free;
      &S->Free;
    }
  }
  __finally
  {
    &Jpg->Free;
  }

}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleBioLifeAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  Response->Content = BioLifeProducer->Content();

}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::CustomerInfoModuleRootAction(
      TObject *Sender, TWebRequest *Request, TWebResponse *Response,
      bool &Handled)
{
  Response->Content = Root->Content();

}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::BioLifeNotesGetText(TField *Sender,
      AnsiString &Text, bool DisplayText)
{
  Text = Sender->Value;

}
//---------------------------------------------------------------------------

void __fastcall TCInfoModule::BioLifeGraphicGetText(TField *Sender,
      AnsiString &Text, bool DisplayText)
{
  Text = \"<IMG SRC=/scripts/\" + ScriptName + \"/getimage alt= [\"
          + BioLifeCommon_Name->AsString + \"] border=0>\" ;
}
//---------------------------------------------------------------------------

Avatar billede cyberlsn Nybegynder
14. oktober 2001 - 17:11 #2
- og så lidt mere, til en \"normal\" webserver:

#include <WebBroker.hpp>
#include <ISAPIApp.hpp>
#include <Isapi2.hpp>
//---------------------------------------------------------------------------
#pragma hdrstop
USEFORM(\"main.cpp\", CInfoModule); /* TWebModule: DesignClass */
USEFILE(\"readme.txt\");
//---------------------------------------------------------------------------
#define Application Webbroker::Application

#pragma link \"isapiapp.obj\"
#pragma link \"webbroker.obj\"
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    try
    {
        Application->Initialize();
        Application->CreateForm(__classid(TCInfoModule), &CInfoModule);
                Application->Run();
    }
    catch (Exception &exception)
    {
    }
    return 1;
}
//---------------------------------------------------------------------------
extern \"C\"
{
  BOOL __export WINAPI GetExtensionVersion(Isapi2::THSE_VERSION_INFO &Ver)
  {
      return Isapiapp::GetExtensionVersion(Ver);
  }
  //---------------------------------------------------------------------------
  int __export WINAPI HttpExtensionProc(Isapi2::TEXTENSION_CONTROL_BLOCK &ECB)
  {
      return Isapiapp::HttpExtensionProc(ECB);
  }
  //---------------------------------------------------------------------------
  BOOL __export WINAPI TerminateExtension(int dwFlags)
  {
      return Isapiapp::TerminateExtension(dwFlags);
  }
}
//---------------------------------------------------------------------------

Håber det kan bruges!
Avatar billede kamikaze Nybegynder
15. oktober 2001 - 12:30 #3
Hmmm...Er det ikke C++ Builder kode? (clinton-2 spurgte om kode til Visual C++)
Avatar billede borrisholt Novice
16. oktober 2001 - 23:53 #4
kamikaze>> Du har ret og der udover giver det kode Builder eller ej ikke meget WebServer.

Jens B
Avatar billede rasmusneckelmann Nybegynder
20. oktober 2001 - 23:51 #5
Et HTTP server eksempel som bruger asynkrone sockets: http://www.sockaddr.com/HTTPa.zip

MEGET let forståligt og logisk opbygget (Ikke ligesom det MFC agtige fis tidligere postet).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester