我从增强网站上获取了聊天示例,我试图进行一些修改,但是我得到了一个错误,我对它的内容没有任何想法。服务器仍然与示例相同,我正在客户端上工作,here the original code from boost website
这里对主要内容进行了一些修改:
int main(int argc, char* argv[])
{
try
{
if (argc < 4)
{
std::cerr << "Usage: client <host> <port> <keywords> [<keywords>...]\n";
return 1;
}
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(argv[1], argv[2]);
tcp::resolver::iterator iterator = resolver.resolve(query);
chat_client c(io_service, iterator);
boost::thread t(boost::bind(&boost::asio::io_service::run, &io_service));
for (int i = 3; i < argc; i++)
{
using namespace std;
chat_message msg;
msg.body_length(strlen("teste"));
memcpy(msg.body(), "teste", msg.body_length());
msg.encode_header();
c.write(msg);
}
c.close();
t.join();
}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
代码在语义上与原始代码类似,但我在do_write
方法中尝试async_write
时收到错误代码10057,错误代码表示&# 34;不允许发送或接收数据的请求,因为套接字未连接(当使用sendto调用在数据报套接字上发送时)没有提供地址&#34; 。
我只是坚持下去,我不知道我哪里出错了,请有人指出我的错误吗?
答案 0 :(得分:0)
您应该放置c.close();在t.join()之后; 2.您应等待2到3秒钟,以使io_service正常运行。 在boost :: thread t之后(boost :: bind(&boost :: asio :: io_service :: run,&io_service))); 应该睡觉(3000);
然后有效