i am writing a private server in c++ and i searched a library for networking. Boost was referenced really often so i used it. Now i want to write something to the socket by using boost::asio::async_write(). The problem is that i need to concat 3 things. The first thing is a string the second thing an string and the third a string aswell. I tried this:
Where x[1] is a vector containing the userid as a string! which was optained by the package of a client.
It told me that there is no + operator so i searched how to concat things "into" a buffer. Google came up with something like this:
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
Abbrechen Wiederholen Ignorieren
---------------------------
An etwas anderem im Code dürfte es eigentlich nicht liegen.
Hier trotzdem mal der komplette code:
Sicher, dass x [1] valid ist?
Ich würd mal x.at (1) statt x [1] verwenden.
Uhm wenn die UserID in deinem vector vom Typ std::string ist, sollte es kein Problem sein den + operator zu benutzen um Strings miteinander zu verketten.
Werde ich nacher versuchen, danke für die Antwort.
Und valid müsste es sein.
Edit: Also x.at(1) geht auch nicht. Wenn ich den + Operator nutze kommt das selbe wie bei deiner Idee mit dem string Stream. Hier ist jetzt mal der Code wie Sachen in den vektor geschrieben werden:
Code:
string packetHeader = buffer.data();
std::vector<string> x = split(packetHeader,'|');
//... Verarbeitung ... Ganz viel If undso ...
//split function
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
}
So das Packet hat folgenden aufbau :
LOGIN|UserId|SessionId|Version
Bsp: LOGIN|1001|12345678|4.1
Hoffe du kannst mir mit den Infos helfen :/ Wenn du mehr Infos brauchst, sag mir einfach was du brauchst.
Ja die userid bekomme ich auch. Ich kann auch einen neuen string machen und alles zusammen fügen oder den StringStream nutzen, aber bei dem senden wird mir immer gesagt
"Program: C:\Windows\system32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring
Line: 79
Expression: string iterator not dereferencable"
Liegt es vielleicht daran das ich die asyn_write methode mit einem boost::asio::buffer aufrufe ? Gibt es vielleicht Wege direkt einen string zu übergeben ?
Habe das schon oft debuggt. Nur desto öfter ich das mache desto weniger verstehe ich es ._.
Edit : Ich weiß ehrlich gesagt nicht wo es sonst liegen soll. Hier ist mal der Code vom write_handler aber daran kann es eigentlich nicht liegen.
Also der Client Schickt nen request und erwartet eine antwort. Danach muss die connection geschlossen werden und eine neue aufgebaut werden. Aber den Code habe ich nie verändert und nur wenn ich das Packet mit dem zusammengesetztem string sende gibt es einen Fehler. Und das senden mache ich so :
Du erstellst ein Objekt vom Typ std::string, welches am Ende seines Gültigkeitsbereiches zerstört wird.
In der steht:
Quote:
A buffer object does not have any ownership of the memory it refers to. It is the responsibility of the application to ensure the memory region remains valid until it is no longer required for an I/O operation. When the memory is no longer available, the buffer is said to have been invalidated.
Weiterhin steht :
Quote:
The buffer is invalidated by any non-const operation called on the given string object.
Das Zerstören deines string-Objektes ist natürlich ebenfalls eine solche Operation. Du nutzt schließlich eine asynchrone Funktion.
[Java / LWJGL] Buffer Problem 09/11/2013 - General Coding - 1 Replies Hallo Leute,
Ich hab ein kleines Problem mit Buffer.
Ich habe schon öfter was mit LWJGL gemacht allerdings immer nur ohne Buffer und ohne DrawElements sondern halt einfach mit glVertex2i und so.
Das Quad zeichnen tut er schon allerdings in weiß obwohl ich eigentlich Farbe definiert habe.
Erstellen der Buffers:
float vertices = {
[Problem] buffer overrun detected 10/24/2011 - Flyff Private Server - 13 Replies Hallo ,Elitepvpers.
Ich habe so ein kleine Problem, was ich jetzt mal kurz und knapp erkläre.
Beim einloggen (Ingame) kommt ein kleiner eror und dann schließt sich mein Client. ( buffer overrun detected )
Hier mal die Erors.
2011/10/23 21:27:29 OP: 7082, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
[Realese] Flyff buffer für homepage buffer server 04/01/2011 - Flyff Private Server - 7 Replies Hallo dies ist mein erstes tool ein flyff buffer für p-server die einen homepage buffer haben
1. den changejob ordner in eure appserv/www verschieben
http://biffi.bplaced.net/pic1.png
2. die config.html mit editor öffnen und eure ip eintragen
http://biffi.bplaced.net/pic2.png
problem mit hp buffer 11/07/2009 - Flyff Private Server - 6 Replies Hallo liebe elitepvpers
ich habe ein problem
in der config,php habe ich alles eingegeben schon hamachi ip statt localhost probiert, aber nichts hat funktzt
bitte um hilfe
ps
ich habe die datein in www reingetan
Bard buffer problem! 08/01/2008 - Silkroad Online - 1 Replies hi, i have a problem with the bard buffer i have....it does not buff when i teleport to town, i have moving march and noise, it has timer so it buffs when the timer finishes, that is ok.....but it doesn't buff when i teleport to the town...... so is there any other way that if it teleports to town and buffs..
thanx for reply!