【发布时间】:2014-05-19 10:25:28
【问题描述】:
我一直在尝试修改 boost 的白天服务器/客户端示例,使其在 2 个线程中运行,如下所示,但没有成功:
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using boost::asio::ip::tcp;
std::string make_daytime_string()
{
using namespace std; // For time_t, time and ctime;
time_t now = time(0);
return ctime(&now);
}
void ServerThread()
{
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));
for (;;)
{
std::cout << "why?";
tcp::socket socket(io_service);
acceptor.accept(socket);
std::string message = make_daytime_string();
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message),
boost::asio::transfer_all(), ignored_error);
}
}
void ClientThread()
{
try
{
boost::asio::io_service io_service;
std::string hostString;
std::cout << "Please enter the host: ";
std::cin >> hostString;
tcp::resolver resolver(io_service);
tcp::resolver::query query(hostString, "daytime");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
}
int main()
{
boost::thread s(&ServerThread);
boost::thread c(&ClientThread);
c.join();
s.join();
return 0;
}
两个线程一个接一个地立即运行,不会正确处理。我想我需要沿着分叉线做一些事情?请帮忙告诉我代码有什么问题,谢谢。
【问题讨论】:
-
如果您正在制作一个真正的客户端/服务器应用程序,如果您为客户端和服务器创建单独的进程(而不是单独的线程),您可能会为自己省去很多麻烦。
-
完全同意,我只是在玩弄线程机制。初学者。
标签: c++ multithreading client-server