[Boost-Asio] SSL Socket Beispiel
-
ich habe das beispiel mit server mal ausprobiert
aber ich bekomme riesige mengen von fehlern
Ve1>Server.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_SSLv23_server_method" in Funktion ""public: void __thiscall boost::asio::ssl::detail::openssl_context_service::create(struct ssl_ctx_st * &,enum boost::asio::ssl::context_base::method)" (?create@openssl_context_service@detail@ssl@asio@boost@@QAEXAAPAUssl_ctx_st@@W4method@context_base@345@@Z)".
und das 48 mal, diese verweise
ich hatte vor ssl socket in einer dll zu verwenden.
ein anderes programm soll eine funktion aus der dll aufrufen, die diese socketverbindung über ssl herstellt, die dll empfängt das signal, wenn die funktion aufgerufen wird, und soll als rückgabewert einen string liefern
und das "andere programm" die daten mitteilen,aber was ist das für ein fehler?
und bei der dll gibt es da eine main ? oder wie läuft das?
könnte mir jemand ein codebeispiel zeigen, das ich einfach nur komplieren bräuchte, bin eher in java zuhause und habe von c++ wenig ahnung, brauche aber diese dll
-
Der Fehler sagt, das du eine Lib nicht, oder falsch gelinkt hast. Ich vermute mal das du nicht gegen SSL gelinkt hast... Wenn du boost::asio mit SSL verwendest benötigst du OpenSSL. http://www.openssl.org/
-
openssl habe ich
unter http://www.openssl.org/source/openssl-1.0.0c.tar.gz habe ich das paket unter openssl/inculde mit include versehen, aber gelinkt habe ich openssl nicht weil in der entpackten openssl-1.0.0c.tar.gz keine *.lib dateien sind
-
juhuu habs hingekriegt, die dll is geschrieben worden,
leider weiss ich nicht was ich mit der funktion main(int argc, char* argv[]) mache?
die soll doch bei einem standardprogramm der einsteigespunkt sein , oder?
wenn ich jetzt ne dll habe weiss ich aus der hilfe das
// Dies ist das Beispiel einer exportierten Funktion.
OE_API int fnoe(void)
{
return 42;
}dies eine funktion ist, die man extern in der dll aufrufen kann und die einen rückgabewert liefert
, aber ich hätte jetzt gerne , das in der fnoe die main aufgerufen wird und der rückgabewert ein string ist, der die übertragenen informationen aus der socketverbindung enhält, also so :
OE_API string fnoe(user, passwort, server.pem)
{
return main(user,passwort, server.pem);
}aber die main hat ja dieses komische int argc und char* ,
könnte jemand für mich die server.cpp umschreiben, das dies wie oben funktioniert?
wärt mir ne echt große hilfe
-
is für mich echt wichtig, weiss keiner rat?
-
Du hast keine Ahnung was eine dll ist, geschweige eine main oder?
-
ich habe nicht viel ahnung von c++
in java wird das anderes gemacht mit der main klasse
hier in der server.cpp wird auf die variablen int argc, char* argv[] zugegriffen
. aber in der dll =dynamic link library , also die wird vom externen programm aus aufgerufen
soll die ssl-socketverbindung hergestellt werden und strings empfangen aus einem java ssl-socket-client
dazu muss ich irgendwie diese server.cpp auf dll betrieb umstellen und dafür sorgen das beim aufruf der dll-funktion, als rückgabewert der empfange string zurückgeschickt wird
-
Wieso musst du eine DLL hernehmen? DLLs können nicht Standalone agieren. Ob du Infos nun an eine DLL schickst oder eine interne Funktion ist egal Dlls kapseln lediglich ein Programm abschnitt quasi wie ein Modul, aber alleine können die nix. Dlls baut man wenn es Sinn macht. Copy & Paste von dem SSL-Example, von Boost.org. alles in eine Datei klatschen und testen. Wenn dein Client dann mit dem Server kommunizieren kannst, gut wenn nicht, Fehler suchen. Dann kann man dir hier auch helfen. Aber du versucht dein Programm von hinten zum laufen zu bekommen und gleichzeitig von vorne zu starten, ach und noch mit Dlls rum fuchteln.
Bau das doch mal Schrittweise auf, kompliziert machen kannst es später immer noch.
so long
jd
-
ok ich habe jetzt das boost server programm aus dem beispiel compiliert.
zunächst kommt, wenn ich es als konsolenanwendung in visual studio 2010 kompiliere , beim starten nur kurz usage serve <port> und dann is das programm auch schon beendet. ich schätze mal ich muss einen port irgendwie übergeben.
aber um die konsolenanwendung geht es mir gar nicht, sondern um die dll.
eine dll ist leider notwendig.
wenn ich nun den code in eine dll packe , weiss ich nicht, wie ich einen string empfangen kann vom client, also wie der befehl dazu ist.
ich habe den code :
BOOST_DLL_API int fnboost_dll(void) { try { if (argc != 2) { std::cerr << "Usage: server <port>\n"; // die meldung erschien immer, wenn ich dies als konsolenanwendung kompiliert habe return 1; } boost::asio::io_service io_service; using namespace std; // For atoi. server s(io_service, atoi(argv[1])); // das ist noch von der main, ist das der port? im format const char* io_service.run(); //hier wird wohl der ssl server gestart, aber wie empfange ich daten vom client? } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } }die dll funktion fnboost_dll() wird aus einem anderen programm, welches die dll benutzt aufgerufen , und als rückgabewert der string den der ssl server vom client empfangen hat,
nur wie is der befehl zum empfangen?
außerdem gibt es da noch das problem, das am besten dei verbindung zwischen server und client aufrechterhalten werden soll, und nicht beim aufrufen der funktion die connection jedesmal neu etabliert wird ....
-
Wow super danke für den Post zu Zertifikaten!