2016-11-10 128 views
2

我正在尝试编写一个程序,它可以通过网络将数据发送到我的Java服务器上侦听端口。从升压asio客户端发送数据

#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和boost 1.60.0。

回答

0

并非真的是您的问题的答案,而是一种解决方法。

我认为错误来自std::copy通话,则可以通过使用data方法从std::string绕过它直接作为缓冲数组,而不是在你的boost::array复制它。

像这样:

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

+0

谢谢。这确实解决了我的问题。我也是新来的堆栈溢出,我是否应该接受这个解决方案,因为它解决了我的问题? – masterconqueror

+0

@masterconqueror请参阅此[帮助主题](http://stackoverflow.com/help/someone-answers)以及此[一](http://stackoverflow.com/help/accepted-answer)以阅读更多关于在这种情况下做什么,并欢迎堆栈溢出:) – Wexiwa