|
You last visited: Today at 15:54
Advertisement
Boost::asio
Discussion on Boost::asio within the C/C++ forum part of the Coders Den category.
10/09/2014, 15:25
|
#1
|
elite*gold: 3
Join Date: Aug 2012
Posts: 2,066
Received Thanks: 300
|
Boost::asio
Heyho. habe ein Problem mit der async_read function der boost asio library.
Ich möchte einen kompletten Satz von Programm1 zu Programm2 schicken, allerdings wird der String/Buffer sehr ungewöhnlich und komisch getrennt, wenn man versucht diesen dann zu readen.....
Kann mir da jemand weiterhelfen?
Ich weiß, dass das hier sehr einfach gehaltene Fragen sind.
Für mehr Details bitte per PN melden.
Brauche dringend Hilfe!
Danke!
|
|
|
10/09/2014, 15:52
|
#2
|
elite*gold: 8
Join Date: Sep 2014
Posts: 625
Received Thanks: 178
|
Schick mir deinen Skypenamen via PM.
|
|
|
10/09/2014, 16:03
|
#3
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Ich nehme mal snow die Arbeit ab.
Wenn du Hilfe willst dann schreib doch gleich in das Thema alle relevanten Sachen zu der Frage. Ich meine warum sollte man dir unbedingt eine PM schreiben ? Ist der code etwa "geheim" oder was ganz tolles was du hier bloß nicht teilen willst ? Wenn ja, dann solltest du dich damit abfinden, dass du nicht viel Hilfe, wenn überhaupt welche, bekommst. Elitepvpers ist immer noch ein Forum und keine Partnerbörse (alle credits zu snow für den satz :P ).
|
|
|
10/09/2014, 16:48
|
#4
|
elite*gold: 3
Join Date: Aug 2012
Posts: 2,066
Received Thanks: 300
|
ja. der code ist geheim. ist ein noch nicht patentiertes projekt, das grade im entstehen ist.
brauch halt hilfe mnit diesem dummen async_read, da das bei mir nicht hinhaut.
greetz.
|
|
|
10/09/2014, 17:02
|
#5
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Mach den Fehler reproduzierbar und poste die Problemstellung hier. Falls zu viel Ramsch drumherum ist, erstell ein kleines Projekt mit genau diesem Fehler.
|
|
|
10/09/2014, 17:59
|
#6
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by MaggieSimpson
Ich möchte einen kompletten Satz von Programm1 zu Programm2 schicken, allerdings wird der String/Buffer sehr ungewöhnlich und komisch getrennt,
|
Hängt vielleicht ein Nullterminator dazwischen?
|
|
|
10/09/2014, 21:26
|
#7
|
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
|
Quote:
|
Ich möchte einen kompletten Satz von Programm1 zu Programm2 schicken, allerdings wird der String/Buffer sehr ungewöhnlich und komisch getrennt,
|
Das liegt wahrscheinlich an der Eigenart des TCP-Protokolls, Stream ist das gesuchte Stichwort.
|
|
|
10/09/2014, 22:41
|
#8
|
elite*gold: 3
Join Date: Aug 2012
Posts: 2,066
Received Thanks: 300
|
Ich baue eine Verbindung zwischen zwei Konsolenanwendungen auf.
Erste Anwendung = Server.
Der Server hört endlos mit async_read_some darauf, ob etwas reinkommt.
Wenn etwas reinkommt wird der input in einem boost::array<char, 4096> buffer gespeichert. Dann wird der Readhandler aufgerufen, indem mit std::cout die bufferdata durch folgenden code ausgegeben wird.
std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
Die Client Anwendung sendet per async_write lediglich den Text an den Server.
Das Problem liegt vermutlich an async_read_some....
Habe es schon mit async_read_until versucht und einen delimiter wie \r eingefügt, allerdings funktioniert das auch nicht.
Greetz. Hoffe das ist ausführlich genug fürs erste
|
|
|
10/10/2014, 08:52
|
#9
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Schon mal async_read oder socket.async_receive probiert ?
|
|
|
10/10/2014, 13:54
|
#10
|
elite*gold: 3
Join Date: Aug 2012
Posts: 2,066
Received Thanks: 300
|
Quote:
Originally Posted by omitma
Schon mal async_read oder socket.async_receive probiert ?
|
Jop. Bei beidemder selbe Effekt...
|
|
|
10/10/2014, 15:22
|
#11
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Also ich glaube dass wir dir hier nicht weiter helfen können, ohne wirklichen Code zu sehen.
Extrahier so wie schon von Schlüsselbein vorgeschlagen den wichtigsten Code in ein neues Projekt, und bau Server und Client so abgespeckt wie möglich. Wenn der Fehler noch existiert, gib uns den Code, nur dann kann dir auch geholfen werden
Padmak
|
|
|
10/10/2014, 22:34
|
#12
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by MaggieSimpson
std::string(buffer.data(), bytes_transferred)
|
Quote:
Originally Posted by Mostey
Hängt vielleicht ein Nullterminator dazwischen?
|
^
Sieht sogar sehr wahrscheinlich nach einem Nullterminator in der Mitte aus. Du solltest das mal selber prüfen wenn du schon keinen Code posten möchtest...
|
|
|
10/13/2014, 07:47
|
#13
|
elite*gold: 3
Join Date: Aug 2012
Posts: 2,066
Received Thanks: 300
|
Ich werde heute Abend/morgen mal was posten.
Wenn man einen String so an den Server vom Client sendet: "Hallo Du"
Dann erhält der Server diesen String so.
Hallo
Du
bzw. wenn der String so aussieht: "Hallo Wie geht es dir"
Dann sieht das ganze so aus:
Hallo
Wiegehtesdir
Hier der Code:
Code:
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <string>
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::socket sock(io_service);
boost::array<char, 4096> buffer;
void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
if (!ec)
{
std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
}
void connect_handler(const boost::system::error_code &ec)
{
if (!ec)
{
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
}
void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it)
{
if (!ec)
{
sock.async_connect(*it, connect_handler);
}
}
int main()
{
boost::asio::ip::tcp::resolver::query query("ip", "80");
resolver.async_resolve(query, resolve_handler);
io_service.run();
}
|
|
|
10/13/2014, 16:47
|
#14
|
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
|
Dass der String abgeschnitten ankommt, liegt, wie ich bereits anmerkte, in der Natur des TCP-Protokolls.
|
|
|
 |
Similar Threads
|
League of Legends Elo Boost --- Division Boost Push Eloboost LoL Boost
08/11/2014 - League of Legends Trading - 5 Replies
.
|
boost::asio::read_until problem
12/14/2013 - C/C++ - 0 Replies
N' Abend,
ich habe ein kleines Problem, und zwar liest boost::asio::read_until Bytes bis zu einem bestimmten Delimiter, es kann aber durchaus vorkommen das mehr Daten im Receive Buffer geschrieben werden, als der Delimiter endet.
Somit habe ich mir etwas geschrieben, um alle vollständigen Packets von dem Receive Buffer zu bekommen, dass klappt auch soweit.
Das Problem hierbei ist aber, wenn ein unvollständiges Packet am Ende steht, versucht er es zu verarbeiten und anschließend zu...
|
boost::asio::buffer Problem
11/15/2013 - C/C++ - 13 Replies
Hello guys,
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:
boost::asio::async_write(sock,boost::asio::buffer ("RDY|I|" + x + ...
|
All times are GMT +1. The time now is 15:54.
|
|