2016-11-10 2 views
2

Ich versuche, ein Programm zu schreiben, das Daten über ein Netzwerk zu meinem Java-Server senden kann, der auf einem Port hört.Senden von Daten von einem Boost Asio Client

#include "stdafx.h" 
#include <boost/asio.hpp> 
#include <boost/array.hpp> 
#include <iostream> 

void do_somenetwork(std::string host, int port, std::string message) 
{ 
    std::array<char, 1024> _arr; 
    boost::asio::io_service ios; 
    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(host), port); 
    boost::asio::ip::tcp::socket socket(ios); 
    socket.connect(endpoint); 

    boost::array<char, 128> buf; 
    std::copy(message.begin(), message.end(), buf.begin()); 
    boost::system::error_code error; 

    socket.write_some(boost::asio::buffer(buf, message.size()), error); 

    socket.read_some(boost::asio::buffer(_arr)); 
    std::cout.write(&_arr[0], 1024); 

    socket.close(); 
} 

int main(){ 
    do_somenetwork(std::string("127.0.0.1"), 50000, ";llsdfsdf"); 

    char ch; 
    std::cin >> ch; 
} 

Wenn ich dieses Programm, das ich erhalte immer Fehlermeldung wie folgt:

C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe -  this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility 2132 1 ConsoleApplication1 

ich die Warnung versucht haben und kein Ergebnis zu diesem Fehler gefunden. Gibt es eine bessere Möglichkeit, diesen Code zu schreiben? Ich bin wirklich neu in C++ und habe keine Ahnung, wie Boost funktioniert. Ich verwende Visual Studio 2013 und Boost 1.60.0.

Antwort

0

Nicht wirklich die Antwort auf Ihre Frage, sondern ein Workaround.

Ich denke, der Fehler aus dem std::copy Anruf kommt, könnte man es umgehen, indem die data Methode von std::string direkt als Pufferarray anstelle des Kopierens es in Ihrem boost::array.

So:

socket.write_some(boost::asio::buffer(message.data(), message.size()), error);

+0

Danke. Das löst mein Problem. Ich bin auch neu beim Überlauf von Stacks, sollte ich das als Lösung akzeptieren, nur weil es meine Bedenken löste? – masterconqueror

+0

@masterconqueror Bitte lesen Sie dieses [Hilfethema] (http://stackoverflow.com/help/someone-answers) sowie dieses [http://stackoverflow.com/help/accepted-answer) zu lesen mehr darüber, was in diesem Fall zu tun ist, und willkommen zu Stack Overflow :) – Wexiwa

Verwandte Themen