gpt4 book ai didi

c++ - boost asio已连接但无法发送消息

转载 作者:行者123 更新时间:2023-11-28 02:08:54 27 4
gpt4 key购买 nike

我正在编写简单的套接字类。我正在尝试编写套接字根据示例 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/chat/chat_client.cpp

我可以连接到服务器(我在日志中看到)但我无法发送或接收消息。在 wireshark 中,我看不到传出消息,但可以看到传入消息。据我了解,io_service 在不同的线程中运行,应该可以接收消息或发送消息。

(这是不完整的类(class),因为我停在了这个描述的问题上)

Ioservice 在类外定义(主)

#include <iostream>
#include <thread>
#include <boost/thread/thread.hpp>
#include "TCP/TCPSocket.h"

using namespace std;

int main()
{
Traces::SetTraceFolder("trace");

boost::asio::io_service io_service;
boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));



TCPSocket socket("192.168.0.7", "6000", io_service);

char *c = new char[100];


while (true) {

std::cin >> *c;
socket.WriteMessage(c);

}

delete [] c;
return 0;
}

我的类(class):

包含“TCPSocket.h”

TCPSocket::TCPSocket(const std::string &adress, const std::string &port, boost::asio::io_service & serviceio)
: io_service(serviceio),
socket_(io_service),
resolver(io_service)

{
Traces() << "\n" << "LOG: TCPSocket::TCPSocket(const std::string &adress, const std::string &port)";


tcp::resolver::query query(adress, port);
querywsk = new tcp::resolver::query(" ", " ");



*querywsk = query;
iterator = resolver.resolve(*querywsk);

boost::asio::async_connect(socket_, iterator,
boost::bind(&TCPSocket::HandleConnect, this,
boost::asio::placeholders::error));

}

void TCPSocket::HandleConnect(const boost::system::error_code& error)
{
Traces() << "\n" << "LOG: void TCPSocket::HandleConnect(const boost::system::error_code& error)";

if (!error)
{
boost::asio::async_read(socket_,
boost::asio::buffer(data, std::strlen(data)),
boost::bind(&TCPSocket::HandleConnect, this,
boost::asio::placeholders::error));
} else
{
Traces() << "\n" << "ERR:";
}
}


void TCPSocket::WriteMessage(char *dataToSend)
{
io_service.post(boost::bind(&TCPSocket::Write, this, dataToSend));
}

void TCPSocket::Write(char *dataToSend)
{
Traces() << "\n" << "LOG: void TCPSocket::Write(char *dataToSend)";

data = dataToSend;

boost::asio::async_write(socket_,
boost::asio::buffer(data, std::strlen(data)),
boost::bind(&TCPSocket::HandleWrite, this,
boost::asio::placeholders::error));

}

void TCPSocket::HandleWrite(const boost::system::error_code& error)
{
Traces() << "\n" << "LOG: void TCPSocket::HandleWrite(const boost::system::error_code& error)";

if (!error)
{

boost::asio::async_write(socket_,
boost::asio::buffer(data,
100),
boost::bind(&TCPSocket::HandleWrite, this,
boost::asio::placeholders::error));
}
else
{
Traces() << "\n" << "ERR:";
}
}

最佳答案

    boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));

在您代码的早期阶段,io_service 没有工作要做。

因此线程启动,io_service 在线程中启动,发现无事可做,因此立即停止。

因此什么也没有发生。

您必须在设置工作后启动 io_service。


您的代码还有其他严重问题,例如您似乎对监听连接请求的套接字服务器和接收和传输消息的连接感到困惑。

我建议您通过学习教程示例重新开始 http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/tutorial.html完成这些步骤后,您将对发生的事情有更好的理解。

关于c++ - boost asio已连接但无法发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36482788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com