对于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服务器)
- Android上的SSL客户端
- Boost ASIO Tcp 客户端/服务器对象连接问题
- boost::asio 之(一)简单客户端服务器回显功能
- c – 使用SSL的boost :: asio – SSL错误后的问题
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客户端
我搜索过Stackoverflow和Googled A LOT,很多人都有类似的问题.到目前为止我找到的所有答案要么不起作用,要么没有任何意义.那里的大多数代码示例都是针对HTTPS的,但我不能使用,因为我需要通过套接字进行通信(SSLSocket是我最好的猜测).我尝试了很多不同的代码,但是现在我又回到零了.
到目前为止,我已经发现我必须创建一个证书(我认为我做对了)和一个自定义的TrustManager.显然我无法找到任何正常工作的代码,这就是我在这里问的原因,因为通常有一些非常有帮助的人.
我正在寻找关于应该做什么的详细描述,以及一些可以制作成有效的Android客户端代码的代码.
提前致谢
解决方法
我刚刚改变了如何创建ssl上下文.
我保证我也会在SandroB网站上放一些工作示例,但是……
总结
以上是小编为你收集整理的Android上的SSL客户端全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
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 之(一)简单客户端服务器回显功能
客户端:
// 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错误后的问题
一切正常,直到我得到一个主机的“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; }
解决方法
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错误后的问题的相关信息,请在本站寻找。
本文标签: