C++提升tcp服务器
C++ boost tcp-server
我试图用boost-libs创建一个tcp服务器。我基本上是从boost中获取示例代码(整个代码在那里的一个文件中),并将其拆分为一个类。
那里好像出了什么问题,我真的不知道缺了什么。
主要错误是在"tcp_server.cpp"的末尾,我将错误消息放在那里的注释中。看起来他不知道函数会话(至少我是这么解释的),我在"tcp_server::session"answers"this->session"中得到了同样的错误。
第二件事是我从"e.what()"中得到的一个错误(无法解析identifier-what)。它在示例代码中起作用,在异常情况下我没有更改任何内容。
提前谢谢。
tcp_server.h
#include <cstdlib>
#include <iostream>
#include <exception>
#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
using boost::asio::ip::tcp;
class tcp_server
{
public:
typedef boost::shared_ptr<tcp::socket> socket_ptr;
tcp_server();
~tcp_server();
void server(boost::asio::io_service&);
private:
const short port = 8888;
const int max_length = 1024;
void session(socket_ptr);
};
tcp_server.cpp
#include "tcp_server.h"
tcp_server::tcp_server()
{
}
tcp_server::~tcp_server()
{
}
void tcp_server::session(socket_ptr sock)
{
try
{
for (;;)
{
char data[max_length];
boost::system::error_code error;
size_t length = sock->read_some(boost::asio::buffer(data), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
boost::asio::write(*sock, boost::asio::buffer(data, length));
}
}
catch (std::exception& e)
{
std::cerr << "Exception in thread: " << e.what() << "n"; //
}
}
void tcp_server::server(boost::asio::io_service& io_service)
{
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
for (;;)
{
socket_ptr sock(new tcp::socket(io_service));
a.accept(*sock);
boost::thread t(boost::bind(session, sock)); //error: no matching function for call to ‘bind(<unresolved overloaded function type>, tcp_server::socket_ptr&)’`
}
}
main.cpp
#include "tcp_server.h"
int main() {
tcp_server server;
try
{
boost::asio::io_service io_service;
server.server(io_service);
}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "n";
}
return 0;
}
您不能bind
非静态成员函数tcp_server::session
,因为在没有对象实例的情况下无法调用它,而对象实例对绑定不可用。
但是,您可以将tcp_server::session
设置为静态(在tcp_header.h中)来修复此问题:
static void session(socket_ptr);
编辑:
您可以使用将会话绑定为非静态成员
boost::thread t(boost::bind(&tcp_server::session, this, sock));
相关文章:
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 从 tcp 服务器打开 8MP H264 流时出现问题
- TCP C++客户端从C#服务器接收字节数组
- TCP套接字(客户端-服务器)recv()返回-1值
- 通过TCP将数据从C++客户端发送到JSON服务器
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- Qt TCP服务器不从客户端读取数据
- C++ TCP 服务器比较字符串失败
- 提升 ASIO TCP 服务器架构
- 如何让客户端通过modbus-tcp协议与多个服务器通信?
- C# 客户端到C++服务器 Tcp 套接字连接错误
- 连接后连接丢失 ->服务器 TCP 提升。亚西奥
- 使用qt的多客户端/服务器TCP应用程序
- C++客户端到Java服务器(TCP/IP)
- 简单的客户机/服务器TCP c++
- 多客户端一服务器TCP c++