我有一个用 boost asio 制成的 TCP/IP 服务器,它封装在一个类中。现在我想在类头文件中声明套接字、eindpoint 和接受器,以便我可以创建使用套接字的成员函数。服务器现在在类构造函数中运行。我尝试使用如下初始化列表:
CommunicationModuleTCPIP::CommunicationModuleTCPIP(bool Server,
string IPAdress,
int PortNumber)
: Sock(new boost::asio::ip::tcp::socket(IOService));
{
// Constructor code
但这会产生编译器错误。Sock 在标头中声明如下:
SmartSocket Sock;
SmartSocket 是一个共享指针,定义如下。
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> SmartSocket;
谁能告诉我是否可以在头文件中声明一个套接字、接受器和端点并初始化这些对象?
欢迎任何建议!
更新
下面是类头文件代码和构造函数代码:
带有端点、套接字和接受器声明的头文件:
public:
// Constructor and destructor
CommunicationModuleTCPIP(bool Server,
string IPAdress,
int PortNumber);
~CommunicationModuleTCPIP();
int Connect();
int Disconnect();
int SendData(SmartSocket sock);
int RecieveData(SmartSocket sock);
int Send(SmartSocket Sock);
int Recieve(SmartSocket sock);
int CheckConnection();
char SendBuffer[20];
char RecvBuffer[20];
SmartSocket Sock;
tcp::endpoint Endpoint;
boost::asio::ip::tcp::acceptor Acceptor;
构造函数,当我在构造函数中创建它们时,注释中是套接字、端点和接受器。这可行,但我想让这些对象成为类的一部分,以便我可以在代码其他部分的成员函数中使用它们(如果可能的话?)。
CommunicationModuleTCPIP::CommunicationModuleTCPIP(bool Server,
string IPAdress,
int PortNumber){
:Endpoint(ip::address::from_string(IPAdress),PortNumber),
Acceptor(IOService, Endpoint),
Sock(new boost::asio::ip::tcp::socket(IOService)
if(Server){
cout << "Setting up server" << endl;
//ip::tcp::endpoint Endpoint(ip::address::from_string(IPAdress),PortNumber);
// Create acceptor
//boost::asio::ip::tcp::acceptor Acceptor(IOService, Endpoint);
// Create socket
//SmartSocket Sock(new boost::asio::ip::tcp::socket(IOService));
cout << "Before accept..." << endl;
// Waiting for client
Acceptor.accept(*Sock);
cout << "Server set up" << endl;
}
我得到的编译器错误如下:
\CommunicationModuleTCPIP.cpp:6:30: fout: 没有匹配函数调用'boost::asio::basic_socket_acceptor::basic_socket_acceptor()'</p>
fout: ':' 标记之前的预期主表达式 ..\CommunicationModuleTCPIP.cpp:7:2: fout: 预期';' 在 ':' 令牌之前 ..\CommunicationModuleTCPIP.cpp:199:2: fout: 输入结束时预期的 '}'
C:\boost_1_54_0/boost/asio/error.hpp:244:45: let op: 'boost::asio::error::system_category' 已定义但未使用 [-Wunused-variable] C:\boost_1_54_0/boost/asio /error.hpp:246:45: 让 op: 'boost::asio::error::netdb_category' 已定义但未使用 [-Wunused-variable] C:\boost_1_54_0/boost/asio/error.hpp:248:45 : let op: 'boost::asio::error::addrinfo_category' 已定义但未使用 [-Wunused-variable] C:\boost_1_54_0/boost/asio/error.hpp:250:45: let op: 'boost:: asio::error::misc_category' 已定义但未使用 [-Wunused-variable]