小编Tan*_*ury的帖子

如何在boost :: asio服务器中使用端口80?

我正在使用boost :: asio库.

我一直在尝试在端口80上运行我的服务器,但无法让它这样做.以下是我的代码中的罪魁祸首,评论中的结果如下:

// This runs fine, and the webpage is visible on localhost:8000
tcp::acceptor a(*io_service, tcp::endpoint(tcp::v4(), 8000));

// This throws an error (at this line)
tcp::acceptor a(*io_service, tcp::endpoint(tcp::v4(), 80));

// This runs fine, but the webpage is NOT visible on localhost or localhost:80
tcp::acceptor a(*io_service, tcp::endpoint());
Run Code Online (Sandbox Code Playgroud)

我注意到端点只接受四位数的端口号.这可能与它有关吗?

如何在端口80上看到我的页面运行?谢谢!

c++ port boost http boost-asio

2
推荐指数
1
解决办法
216
查看次数

无法使用boost asio设置TCP源端口

通常,作为客户端从哪个源端口发送数据并不重要,但我仍然想要进行一些测试.所以我试图将我的客户端的套接字绑定到一个特定的端口,但即使我在我的本地机器上运行客户端和服务器(使用localhost作为目标地址),服务器告诉我我的源端口是59000.我初始化我的套接字像这样:

tcp::socket socket(io_service,tcp::endpoint(tcp::v4(),2000));
Run Code Online (Sandbox Code Playgroud)

有可能做我想做的事吗?我试图找出我的路由器在消息通过时是否更改了端口.这就是我正在玩的NAT遍历的东西.

sockets boost tcp boost-asio nat-traversal

2
推荐指数
1
解决办法
3419
查看次数

如何在 boost HTML3 示例中向服务器发送 SIGTERM 或 SIGINT 信号?

我使用 boost 的 HTML Server 3 示例作为异步消息的学习工具(http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html#boost_asio.examples.http_server_3)处理。

我已经采取了这个例子,并将其变成一个带有服务器对象的库,我可以在我的程序中实例化。我对上面的示例所做的唯一一件事就是删除 main.cpp 并将其编译为库。它的工作范围是我可以在代码中实例化服务器对象,并从命令行向它传递消息。

我正在努力的是如何优雅地终止服务器。从示例代码中我看到了这一点:

server::server(const std::string& address, const std::string& port,  
               std::size_t thread_pool_size,
               Handler &handler)  
        : thread_pool_size_(thread_pool_size),  
          signals_(io_service_),  
          acceptor_(io_service_),  
          new_connection_(),  
          request_handler_(handler)  
{  
  // Register to handle the signals that indicate when the server should exit.  
  // It is safe to register for the same signal multiple times in a program,  
  // provided all registration for the specified signal is made through Asio.  
  signals_.add(SIGINT);  
  signals_.add(SIGTERM);  
  signals_.async_wait(boost::bind(&server::handle_stop, this));
Run Code Online (Sandbox Code Playgroud)

因此设置了一个异步线程来监听信号并响应它们

我在程序的线程中实现了该服务器对象,如下所示:

class ServerWorker
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost signals boost-asio

2
推荐指数
1
解决办法
4114
查看次数

如何在没有Boost的Xcode C++ 11中使用Asio standalone

根据这个页面,使用没有Boost的Asio应该是相当简单的,但我仍然无法编译任何include看起来像这些任何文件的文件:

#include <asio>
#include <asio.hpp>
#include <asio/version.hpp>
Run Code Online (Sandbox Code Playgroud)

我已经将我的编译器设置为使用c ++ 11(它已经在做了,虽然我确实切换gnu++11到了c++11),并且我已经#define ASIO_STANDALONE 我正在尝试的各种包含之前放置了.

除此之外,是否还需要一些额外的工作来访问c ++ 11 Asio标头?我只是file not found在使用上述任何尝试进行编译时遇到错误.

c++ xcode boost-asio c++11

2
推荐指数
1
解决办法
1570
查看次数

如何在 Clion 中链接 ws2_32

我正在使用 Clion,它使用 MinGW 和 Cmake。当我尝试使用独立asio库时,我得到了

undefined reference to `WSAStartup@8'
undefined reference to `WSASetLastError@4'
undefined reference to `closesocket@4'
...
Run Code Online (Sandbox Code Playgroud)

我相信我必须链接C:/Windows/System32/ws2_32.dll图书馆。我尝试添加如下内容-L C:/Windows/System32 -lws2_32

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static -lws2_32")
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。我该如何修复这些错误?

c++ mingw cmake boost-asio clion

2
推荐指数
1
解决办法
3558
查看次数

如何从boost线程调用Python?

我有一个Python应用程序调用C++ boost python库,它都可以工作.但是,我有一个回调C++到Python的场景,其中来自boost线程的C++调用python,我在C++端获得访问冲突.如果我使用python线程执行完全相同的回调,它可以完美地工作.因此我怀疑我不能简单地使用boost线程从C++回调Python,但需要做一些额外的工作吗?

c++ python multithreading boost-thread boost-python

2
推荐指数
1
解决办法
871
查看次数

关闭后提升 asio async_connect 成功

单线程应用程序。

它不是每次都发生,只有在高负载 1.5 小时后才会发生。

  1. tcp::socket::async_connect
  2. tcp::socket::close(通过deadline_timer)
  3. async_connect_handler 给出成功 error_code (一百万次之一),但套接字被(2)关闭。99.999% 的时间它给出 errno=125 (ECANCELED)。

套接字实现或 boost asio 是否有可能以某种方式执行此操作:

  1. 异步连接
  2. 异步成功发布到 io_service
  3. 定时关闭
  4. 异步成功由我处理,不受关闭影响

现在通过在我的变量中保存状态来解决,忽略接受成功。

Linux 2.6 (fedora)。提升 1.46.0

PS:当然可能有我的错误......但如果不是这样的话,它可以顺利运行几天。

c++ sockets boost boost-asio

1
推荐指数
1
解决办法
5415
查看次数

使用Boost.Asio只读取所需的字节数

我只是创建一个非常简单的C++类,它为我提供了几个方法,如connect()read(),而不是公开所有Boost.Asio的套接字调用.

现在,我正在尝试找出如何创建一个只读取所需字节数的方法:

SocketClient::read(int bytes, char* data); //reads desired amount of bytes and puts them in data, size of data>bytes!
Run Code Online (Sandbox Code Playgroud)

不幸的是,我read_byte在Boost.Asio中找不到任何功能.我不想丢弃已收到但尚未读取的字节.

这是我的课.

c++ sockets boost boost-asio

1
推荐指数
1
解决办法
4402
查看次数

将 boost::deadline_timer 回调与相应的 wait_async 相匹配

考虑这个简短的代码片段,其中一个 boost::deadline_timer 中断了另一个:

#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/asio.hpp>

static boost::asio::io_service io;
boost::asio::deadline_timer timer1(io);
boost::asio::deadline_timer timer2(io);

static void timer1_handler1(const boost::system::error_code& error)
{
    std::cout << __PRETTY_FUNCTION__ << " time:" << time(0) << " error:" << error.message() << " expect:Operation canceled." << std::endl;        
}        

static void timer1_handler2(const boost::system::error_code& error)
{
    std::cout << __PRETTY_FUNCTION__ << " time:" << time(0) << " error:" << error.message() << " expect:success." << std::endl;        
}        

static void timer2_handler1(const boost::system::error_code& error)
{
    std::cout << __PRETTY_FUNCTION__ << " …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

1
推荐指数
1
解决办法
1499
查看次数

我在哪里可以下载boost :: asio :: ssl的ca.pem文件?

doc/html/boost_asio/example/cpp03/ssl/client.cpp - 1.58.0的示例中,它加载了一个名为的文件ca.pem,但在哪里可以下载它?我试图从Firefox导出一个,并尝试使用我的系统中的那个/usr/share/ca-certificates/mozilla/GeoTrust_Global_CA.crt,但是示例程序只返回消息

Verifying /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
Handshake failed: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?非常感谢.

c++ ssl boost boost-asio

1
推荐指数
1
解决办法
1338
查看次数