GVKun编程网logo

Linux上的Boost和ssl客户端服务器构建问题(linux socks5服务器)

21

对于Linux上的Boost和ssl客户端服务器构建问题感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解linuxsocks5服务器,并且为您提供关于Android上的SSL客户端、Boos

对于Linux上的Boost和ssl客户端服务器构建问题感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解linux socks5服务器,并且为您提供关于Android上的SSL客户端、Boost ASIO Tcp 客户端/服务器对象连接问题、boost::asio 之(一)简单客户端服务器回显功能、c – 使用SSL的boost :: asio – SSL错误后的问题的宝贵知识。

本文目录一览:

Linux上的Boost和ssl客户端服务器构建问题(linux socks5服务器)

Linux上的Boost和ssl客户端服务器构建问题(linux socks5服务器)

安装pcl(点云库)时,我已将boost作为第三个库安装。

现在,我正在尝试运行客户端和服务器程序http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/example/cpp03/ssl/client.cpp

尝试链接所需的库时:

g++ -I /usr/include/boost/  server.cpp -o server -lboost_system -lssl -lpthread

出现以下错误:

/ usr / bin / ld:/tmp/ccRbD849.o:对符号’ERR_reason_error_string @@
OPENSSL_1.0.0’的未定义引用//lib/x86_64-linux-
gnu/libcrypto.so.1.0.0:添加符号时出错:缺少DSO从命令行collect2:错误:ld返回1退出状态

当我搜索 usr 文件夹时,Boost文件夹仅存在于 include 子文件夹中。

我该怎么办才能解决这个问题。

答案1

小编典典

[…] libcrypto.so:[…]命令行缺少DSO

讲清楚!你不见了

-lcrypto

在链接器命令行上。实际上我总是-lssl -lcrypto串联使用

Android上的SSL客户端

Android上的SSL客户端

我目前正在为 Android(2.2)和使用SSL的服务器编写客户端部分.我设法在服务器和普通客户端之间交换消息,但Android似乎对自签名证书不太满意.
我搜索过Stackoverflow和Googled A LOT,很多人都有类似的问题.到目前为止我找到的所有答案要么不起作用,要么没有任何意义.那里的大多数代码示例都是针对HTTPS的,但我不能使用,因为我需要通过套接字进行通信(SSLSocket是我最好的猜测).我尝试了很多不同的代码,但是现在我又回到零了.

到目前为止,我已经发现我必须创建一个证书(我认为我做对了)和一个自定义的TrustManager.显然我无法找到任何正常工作的代码,这就是我在这里问的原因,因为通常有一些非常有帮助的人.

我正在寻找关于应该做什么的详细描述,以及一些可以制作成有效的Android客户端代码的代码.

提前致谢

解决方法

我已经完成了移植本机Android浏览器.
我刚刚改变了如何创建ssl上下文.
我保证我也会在SandroB网站上放一些工作示例,但是……

总结

以上是小编为你收集整理的Android上的SSL客户端全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Boost ASIO Tcp 客户端/服务器对象连接问题

Boost ASIO Tcp 客户端/服务器对象连接问题

您缺少一个 break 语句:

TCP::TCP(TYPE type) {
    switch (type) {
    case (CLIENT):
        setup_client();
        break;
    case (SERVER):
        setup_server();
        break;
    default:
        break;
    }
}

这意味着您的客户端也尝试在同一端口上打开一个接受器。这通常是不允许的。

简化

删除大量错误源:

Live On Coliru

#define PORT 8383
#include <boost/asio.hpp>
#include <iostream>
using namespace std::chrono_literals;
using boost::asio::ip::tcp;
using boost::system::error_code;

struct TCP {
    enum TYPE { CLIENT,SERVER };

    TCP(TYPE type);
    ~TCP();
    std::string read_socket();
    void send_socket(const std::string& message);

  private:
    boost::asio::io_service _io_service;
    tcp::socket _socket { _io_service };
    tcp::acceptor _acceptor { _io_service };
};

TCP::TCP(TYPE type) {
    if (type == CLIENT) {
        _socket.connect(tcp::endpoint{ {},PORT});
    } else {
        _acceptor = tcp::acceptor{_io_service,{{},PORT}};
        //_acceptor.bind({{},PORT});
        _acceptor.accept(_socket);
    }
}

TCP::~TCP() {
    if (_socket.is_open())   _socket.close();
    if (_acceptor.is_open()) _acceptor.close();
}

std::string TCP::read_socket() {
    std::string data;
    auto n = read_until(_socket,boost::asio::dynamic_buffer(data),"\n");
    data.resize(n);
    return data;
}

void TCP::send_socket(const std::string& message) {
    write(_socket,boost::asio::buffer(message + "\n"));
}

int main() {
    std::thread server_th([&] {
        TCP s(TCP::SERVER);
        s.send_socket("ECHO: " + s.read_socket());
    });

    std::thread client_th([&] {
        std::this_thread::sleep_for(10ms);
        TCP c(TCP::CLIENT);
        c.send_socket("Hello world!");
        std::cout << c.read_socket() << "\n";
    });

    client_th.join();
    server_th.join();
}

印刷品

ECHO: Hello world!

boost::asio 之(一)简单客户端服务器回显功能

boost::asio 之(一)简单客户端服务器回显功能

客户端:

// BoostDev.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/cerrno.hpp>



size_t read_complete(char * buf, const boost::system::error_code & err, size_t bytes)
{
    if (err) return 0;
    bool found = std::find(buf, buf + bytes, ''\n'') < buf + bytes
        ;
    // 我们一个一个读取直到读到回车, 不缓存
    return found ? 0 : 1;
}
void sync_echo(std::string msg) {
    msg += "\n";
    std::cout << msg << std::endl;
    boost::asio::io_service service;
    //boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 2001); // listen on 2001
    boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"),2002);
    boost::asio::ip::tcp::socket sock(service);
    sock.connect(ep);
    sock.write_some(boost::asio::buffer(msg));
    char buf[1024];
    int bytes = read(sock, boost::asio::buffer(buf), boost::bind(read_complete, buf, _1, _2));
    std::cout << bytes << std::endl;
    std::string copy(buf, bytes - 1);
    msg = msg.substr(0, msg.size() - 1);
    std::cout << "server echoed our " << msg << ": " << (copy == msg ? "OK" : "FAIL") << std::endl;
    sock.close();
}
int main(int argc, char* argv[]) {
    const char* messages[] = {"John says hi", "so does James", "Lucyjust got home", "Boost.Asio is Fun!", 0 };
    boost::thread_group threads;
    for (const char ** message = messages; *message; ++message) {
        threads.create_thread(boost::bind(sync_echo, *message));
        boost::this_thread::sleep(boost::posix_time::millisec(100));
    } 
    threads.join_all();
}

 

服务端:

// BoostSever.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp>


size_t read_complete(char * buff, const boost::system::error_code & err, size_t
    bytes) {
    if (err) return 0;
    bool found = std::find(buff, buff + bytes, ''\n'') < buff + bytes;
    // 我们一个一个读取直到读到回车, 不缓存
    return found ? 0 : 1;
} 
void handle_connections() {
    boost::asio::io_service service;
    boost::asio::ip::tcp::acceptor acceptor(service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 2002));
    char buff[1024];
    while (true) {
        boost::asio::ip::tcp::socket sock(service);
        acceptor.accept(sock);
        int bytes = read(sock, boost::asio::buffer(buff), boost::bind(read_complete, buff, _1, _2));
        std::cout << bytes << std::endl;
        std::string msg(buff, bytes);
        sock.write_some(boost::asio::buffer(msg));
        sock.close();
    }
} 
int main(int argc, char* argv[]) {
    handle_connections();
}

 

c – 使用SSL的boost :: asio – SSL错误后的问题

c – 使用SSL的boost :: asio – SSL错误后的问题

我在我的应用程序中使用同步boost :: asio SSL套接字.我初始化所有参数然后连接到一些主机(一个接一个)并为每个主机执行GET请求.

一切正常,直到我得到一个主机的“404 – Not Found”错误.发生此错误后,所有新连接都会因某些未指定的SSL错误而失败.

我是否必须以某种方式重置ssl :: stream?是否可以在每次连接后重新初始化ssl :: stream?

在下面的代码片段中,我删除了错误处理和所有非asio相关的事情.

主要:

asio::io_service ioservice;
asio::ssl::context ctx(ioservice,asio::ssl::context::sslv23);
ctx.set_verify_mode(asio::ssl::context::verify_none);

Connector *con = new Connector(ioservice,ctx);

while (!iplist.empty())
{
    ...
    con->ssl_connect(ipaddress,port);
    ...
}

连接器:

Connector::Connector(asio::io_service& io_service,asio::ssl::context &ctx) 
    : sslSock(io_service,ctx)
{
}

Connector::ssl_connect(std::string ipadr,std::string port)
{
    ...
    tcp::resolver resolver(ioserv);
    tcp::resolver::query query(ipadr,port);
    endpoint_iterator = resolver.resolve(query);
    ...

    asio::error_code errorcode = asio::error::host_not_found;
    tcp::resolver::iterator end;

    // Establish connection
    while (errorcode && endpoint_iterator != end)
    {
        sslSock.lowest_layer().close();
        sslSock.lowest_layer().connect(*endpoint_iterator++,errorcode);
    }
    sslSock.handshake(asio::ssl::stream_base::client,errorcode);
    ...
    asio::write(...);
    ...
    asio::read(...);
    ...
    sslSock.lowest_layer().close();
    ...
    return;
}

解决方法

我从asio邮件列表中得到了答案(非常感谢Marsh Ray). Sam Miller是正确的,因为每次都必须创建asio :: ssl :: context.为此,使用std :: auto_ptr.

Connector.h:

std::auto_ptr<asio::ssl::stream<tcp::socket>> sslSock;

Connector.cpp:

asio::ssl::context ctx(ioserv,asio::ssl::context::sslv23);
ctx.set_verify_mode(asio::ssl::context::verify_none);
sslSock.reset(new asio::ssl::stream<tcp::socket>(ioserv,ctx));

关于Linux上的Boost和ssl客户端服务器构建问题linux socks5服务器的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android上的SSL客户端、Boost ASIO Tcp 客户端/服务器对象连接问题、boost::asio 之(一)简单客户端服务器回显功能、c – 使用SSL的boost :: asio – SSL错误后的问题的相关信息,请在本站寻找。

本文标签: