Protokoll einer Serveranwendung ändern
-
ich habe bei http://www.codeproject.com
einen artikel mit nem demo Programm gefundenhttp://www.codeproject.com/internet/iocp_server_client.asp
ich würde gern daraus nen webserver basteln.
ich habe aus diesem demo Programm schon nen kompletten chatserver gebaut mit unterstützung von Ameldungen(authentifizierung) und mehreren chaträumen usw.
dewegen würde ich das gern als grundlage für den webserver verwenden da ich dann mance teile gleich weiterverwenden könnte (z.b. die Klasse um das Programm in die Taskleiste zu verschieben).Leider habe ich ein Problem der autor hat hier ein eigenes Protokoll erstellt was ich nun ändern müsste.
ich habe mich zwar schon über das http protokoll informiert und weiss wie die Befehle aussehen müssen habe mir auch nen kleinen clienten gebastelt um das eben zu testen.
Mein Problem ist das ich nicht weiss was ich alles ändern muss und wie ich das am esten realisiere.
ich habe den code schon ein bissl durchsucht um zu sehen wo ich etwas ändern muss. und habe schon ein paar sachen gefunden z.b.
void MyIOCP::NotifyReceivedPackage(CIOCPBuffer *pOverlapBuff,int nSize,ClientContext *pContext)
{
BYTE PackageType=pOverlapBuff->GetPackageType();
switch (PackageType)
{
case Job_SendText2Client :
Packagetext(pOverlapBuff,nSize,pContext);
break;
case Job_SendFileInfo :
PackageFileTransfer(pOverlapBuff,nSize,pContext);
break;
case Job_StartFileTransfer:
PackageStartFileTransfer(pOverlapBuff,nSize,pContext);
break;
case Job_AbortFileTransfer:
#ifdef TRANSFERFILEFUNCTIONALITY
DisableSendFile(pContext->m_Socket);
#endif
break;
};
}Hier müssen wohl alle funktionen abgeändert werden die hier aufgerufen werden
wobei dann wohl nur 2 funktionen übrigbleiben einmal das textsenden daraus möchte ich eine Funktion machen geparste Dateien zu senden(oder Dateien die zur Laufzeit generiert werden) und die Datei senden Funktion um eben html dateien zu sendenBOOL CIOCPBuffer::GetPackageInfo(BYTE &Type, BYTE &key, CString &stxt)
{
int nSize=GetPackageSize();
if(nSize>=1&&nSize<=GetSize()-MINIMUMPACKAGESIZE)
{
// Get the Type
memmove(&Type,GetBuffer()+MINIMUMPACKAGESIZE,1);
// Get the keys
memmove(&key,GetBuffer()+MINIMUMPACKAGESIZE+1,1);
// Get The text
PBYTE pData=GetBuffer()+MINIMUMPACKAGESIZE+2;
// Assumes that we already have a null termination.
stxt=pData;
return TRUE;
}
return FALSE;
}Hier muss ich ja nun so abändern das nichtmehr nach einer festen größe getrennt wird sondern nach Leer und sonderzeichen ?
GET / HTTP/1.0\nHost: www.google.com\n\nHoffe es hat jemand zeit mir ein bissl unter die arme zu greifen vorallem um alle sachen zu finden die geändert werden müssen.
Also danke schonmal im Vorraus
PS: wenn jemand das mit Visual Studio2003 kompilieren will muss im code einpaar type konversationen entfernen im artikel steht auch dazu was geändert werden muss
-
Ich habe weiter an dem Programm gearbeitet hab es jetzt auch schon halbwegs so hinbekommen wie ich das haben will. Nun tauchte aber leider ein Problem alles was mit dem Empfang der Nachricht zu tun klappt aber irgendwie hängt der browser danach und die antwort des Servers wird wird entweder nicht abgeschickt oder vom Browser nicht verarbeitet. Da komme ich leider wie gesagt nicht weiter da ich nicht weiss warum und wo er hängt.
Wenn also jemand Zeit und Interesse hat kann ich ihm gern den SourceCode Mailen (meine Email Adresse ist HundundKatz[at]gmx.de oder wenn jemand weiss wo(kostenlos) auch hochladen. der code den ich eingefügt oder Verändert habe
ist markiert. eine Übersicht welche funktionen nacheinander aufgerufen werden um einen request zu verarbeiten kann ich natürlich auch hier anfügen.Falls noch fragen sind stellt sie ruhig

-
Es ist extrem unwahrscheinlich das sich jemand die Mühe macht.
Da kannst du besser im Codeproject Artikel die Frage stellen. Obwohl es da bestimmt auch nichts wird.
-
@Hinweis erstmal danke für den Hinweis

auf die Idee dort bei codeproject zu fragen kam ich auch schon leider sagt der autor dort schon in nem Posting das er aufgrund von 12-13 Stunden täglich arbeiten nicht viel zeit hat zu helfen.
Naja hier wars nen Versuch wert, ich bin ziehmlicher Anfänger und somit dürfte mein Problem für erfahrenere Programmierer wohl eher im Bereich Fingerübung liegen.
Es geht ja nicht darum es fertig zu Programmieren
-
dürfte mein Problem für erfahrenere Programmierer wohl eher im Bereich Fingerübung liegen.
Da du aber keine konkreten Fragen hast, würde es Stunden oder Tage dauern dir zu helfen.
Auf www.lenholgate.com findest du auch noch ein Framework für Server. Vielleicht kommst du damit ja besser zurecht.
-
@^^ naja viel konkreter gehts leider nicht wenn ich wüsste wo der fehler liegt könnt ich ihn warscheinlich auch beheben.
Das Problem ist das ich das nicht eingrenzen kann auf ein bestimmt funktion.
Da dort schon eine Log funktion vorhanden ist habe ich einfach in jeder funktion die von anfang an also aufbau der verbindung und empfang der Nachricht bis halt zum senden der anwort immer per kommentar verewigt. die Nachricht kommt auch an und wird verabeitet( momentan prüfe ich nur ob ein GET drin vorkommt und ersetze den Pfad / durch /index.html) dann wird die anfang zusammengestellt da wird halt einfach die anfrage in ne html datei verpackt und dann sollte sie halt zurückgesendet werden. da komme ich bis zu einem Punkt wo eine funktion endet mit return ASend(... die funktion ASend sendet dann halt die antwort und ab da ende kein fehler nix.
Muss nun leider mal für 2-3Stunden weg wenn ich zurück bin werde ich mal meiner nächsten idee nachgehen und probieren nach dem senden den socket vom server schließen zu lassen wobei ja eigentlich von den informationen zum html Protokoll der response header ja folgendes enthält "connection:close" was eigentlich den Browser veranlassen sollte die Verbindung zu schließen nachdem die nachricht mit der größenangabe die im header mit drin steht empfangen wurde
und zu der Idee einen Anderen Code zu verwenden oder vielleicht selbst das ganze zu Programmieren was schon mangels meiner Programmiererfahrung flach fällt habe ich im ersten Post schon geschrieben das ich eben mit dem Code nun schon andere anwendungen "gebastelt"(um genau zu sei 3 stück) habe und wenn ich nun hier was anderes verwende kann ich diesachen eben nicht verwenden was dann einen erheblichen arbeitsaufwand bedeutet. Das der Code nicht Ideal ist weiss ich selbst denn mal ehrlich ohne dem Autor zu nahe zu treten was bitte sucht Protokoll verabeitung in einer Klasse IOCPBuffer und selbst laut sein artikel sollten die sachen eigentlich nur in der MYIOCP Klasse sein und nirgends anders.
-
kannst ja mal ein sniffer-tool benutzen um zu gucken was wirklich ankommt.