美文网首页
linux boost.asio 通信中遇到错误

linux boost.asio 通信中遇到错误

作者: 送分童子笑嘻嘻 | 来源:发表于2019-12-14 10:54 被阅读0次

    错误
    boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
    what(): bind: Permission denied
    原因
    在UNIX系统上,第一个1024端口仅限于root用户,因此如果 serverPort <1024,则应尝试> 1024
    解决
    将网上抄的代码中设置的端口号由1000改为8888,问题解决

    错误
    /usr/include/boost/system/error_code.hpp:221:对‘boost::system::generic_category()’未定义的引用
    解决
    add_executable(boost_server2 boost_server2.cpp)
    下添加这个
    add_executable(boost_server2 boost_server2.cpp)
    target_link_libraries(boost_server2 -lboost_system)

    真是方便,可以直接传vector
    但是要通过vector.resize 提前在socket服务端配置大小,

    一个可以接受vector的socket

    #include <iostream>
    #include <boost/asio.hpp>
    #include <vector>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char *argv[]) {
        using namespace boost::asio;
        // 所有asio类都需要io_service对象
        io_service iosev;
        ip::tcp::acceptor acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), 8888));
        for (;;) {
            // socket对象
            ip::tcp::socket socket(iosev);
    
            // 等待直到客户端连接进来
            acceptor.accept(socket);
    
            // 显示连接进来的客户端
            std::cout << socket.remote_endpoint().address() << std::endl;
            vector<uint32_t> image;
            // 向客户端发送hello world!
            boost::system::error_code ec;
    
            socket.write_some(buffer("boost_server3.cpp:hello world!"), ec);
            // 如果出错,打印出错信息
            if (ec) {
                std::cout << boost::system::system_error(ec).what() << std::endl;
                break;
            }
            // 与当前客户交互完成后循环继续等待下一客户连接
            // 接收数据
            //获得宽和搞
    
    //        std::array<int, 2> a_int2;
    //        size_t len1 = socket.read_some(buffer(a_int2), ec);
    //        std::cout << "a_int2.at(0)=" << a_int2.at(0) << std::endl;
    //        std::cout << "a_int2.at(1)=" << a_int2.at(1) << std::endl;
    //        int width = a_int2.at(0);
    //        int height = a_int2.at(1);
    //        vector<uint32_t> t_32;
            vector<int > t_32;
            t_32.resize(50000);
            size_t len = socket.read_some(buffer(t_32), ec);
            std::cout << len << std::endl;
    //        for (int i = 0; i < t_32.size(); ++i) {
    //            std::cout << t_32[i] << std::endl;
    //        }
            Mat src = Mat::zeros(219, 205, CV_8UC1);
    //    Mat src(600,400,CV_8UC3);
    //        // 在图片的正中间增加一根红色的线条
    //        for (int j = 0; j < src.cols; ++j) {
    //            src.at<Vec3b>(300,j) = Vec3b(0,0,255);
    //        }
            int test = 0;
            for (int i = 0; i < 205; ++i) {
                std::cout<<" " <<std::endl;
                for (int j = 0; j <219 ; ++j) {
                    int Gray = t_32[i * 205 + j];
                    src.at<uchar>(i, j) = (uchar)Gray;
                    if (Gray > 200) {
                        test++;
                    }
                    std::cout<<Gray<<" " ;
                }
            }
          std::cout << "test=" <<test<< std::endl;
            imshow("dst", src);
            waitKey(0);
            destroyAllWindows();
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:linux boost.asio 通信中遇到错误

          本文链接:https://www.haomeiwen.com/subject/aiitnctx.html