【发布时间】:2014-12-28 00:00:22
【问题描述】:
我正在尝试使用 TCP 从客户端和服务器发送和接收消息。我正在尝试使用线程,但我根本不知道该怎么做。我可以很好地连接到服务器,但我需要能够按需从两个地方发送和接收消息。我已经搜索了好几个小时,结果都是空的,因为 Google 上的所有结果都过于复杂和混乱。
struct Client
{
boost::asio::ip::tcp::socket socket;
Client(const char* host = HOST, const char* port = PORT) : socket(io_service)
{
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(boost::asio::ip::tcp::resolver::query(HOST, PORT));
boost::asio::connect(this->socket, endpoint);
};
};
这就是我目前为客户所做的一切。
对于服务器:
const int PORT = 52275;
int main()
{
try
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::acceptor acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), PORT));
{
boost::asio::ip::tcp::socket socket(io_service);
acceptor.accept(socket);
main();
}
}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << std::endl;
}
}
【问题讨论】:
-
您在此处请求的所有结果,您会发现“过于复杂和混乱”。原因很简单,它们也不一定适合您的参考/代码上下文框架。这样做的主要原因是:您不共享任何上下文代码。 (现在,您是安全的,因为没有人会花一个小时为您重新发明其中一个示例,只是因为您不喜欢现有的示例。那浪费时间。)
-
我不是要求为我重新创建一个完整的解释,而是一个简单的例子或沟通的解释。我尝试调整我找到的示例,但所有示例都导致错误。我不是 C++ 方面的专家,但我并不陌生,以至于我需要为我制作的所有东西。 Boost asio 几乎没有文档记录。
-
Really?正如您在问题中提到的那样,您所要求的东西存在于许多地方。 SO 是您提出具体编程问题的地方。所以,告诉我们你被困在什么地方。我们不会在没有任何上下文的情况下使用谷歌搜索好的示例。你可以做得更好。
-
我无法在客户端和服务器之间发送消息,并允许使用回调函数。我以前说过。你多虑了。我已经给出了代码的上下文。我没有要求任何人谷歌任何示例,我已经要求某人提供示例或解释,而你继续表现得好像我唯一想做的就是让某人为我谷歌一些东西。
-
“我可以很好地连接到服务器,但我需要能够按需从两个地方发送和接收消息” 你提出了一个非常广泛、不清楚的问题.如果你需要很多东西,我怎么能推断你只想发送
n字节?我不会假设这样的事情。
标签: boost boost-asio