Отправка данных от клиента asio boost
Я пытаюсь написать программу, которая может отправлять данные по сети на мой Java-сервер, прослушивающий порт.
#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;
}
Когда я использую эту программу, я получаю сообщение об ошибке, как показано ниже:
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
Я пробовал предупреждение и не нашел никакого результата, связанного с этой ошибкой. Есть ли лучший способ написать этот код? Я действительно новичок в C++ и не имею большого представления о том, как на самом деле работает Boost. Я использую Visual Studio 2013 и повысить 1.60.0.
1 ответ
Не совсем ответ на ваш вопрос, а скорее обходной путь.
Я думаю, что ошибка исходит от std::copy
Вы можете обойти это, используя метод данных из std::string
непосредственно как буферный массив, а не копировать его в ваш boost::array
,
Как это:
socket.write_some(boost::asio::buffer(message.data(), message.size()), error);