BOOST-ASIO没有服务器导致客户端崩溃
C++: BOOST-ASIO No server causes client to crash?
以下代码在连接器boost::asio::connect(s, iterator);
处崩溃,输出如下:
before connector:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Process returned 3 (0x3) execution time : 1.281 s
Press any key to continue.
我没有一个服务器运行在端口4001与本地主机连接,我想知道是否有一种方法来防止这种崩溃发生的情况下,服务器不运行的原因,但客户端仍然可以运行软件。换句话说,有没有一种方法可以在不使程序崩溃的情况下查看服务器是否存在?
下面是代码
//
// blocking_tcp_echo_client.cpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
enum { max_length = 1024 };
int main(int argc, char* argv[])
{
//try
// {
//if (argc != 3)
//{
// std::cerr << "Usage: blocking_tcp_echo_client <host> <port>n";
// return 1;
//}
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
//tcp::resolver::query query(tcp::v4(), argv[1], argv[2]);
tcp::resolver::query query(tcp::v4(), "127.0.0.1", "4001");
tcp::resolver::iterator iterator = resolver.resolve(query);
tcp::socket s(io_service);
std::cout << "before connector: ";
boost::asio::connect(s, iterator);
std::cout << "after connector: ";
using namespace std; // For strlen.
std::cout << "Enter message: ";
char request[max_length];
std::cin.getline(request, max_length);
size_t request_length = strlen(request);
boost::asio::write(s, boost::asio::buffer(request, request_length));
char reply[max_length];
size_t reply_length = boost::asio::read(s,
boost::asio::buffer(reply, request_length));
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "n";
//}
//catch (std::exception& e)
//{
// std::cerr << "Exception: " << e.what() << "n";
//}
return 0;
}
boost::asio::connect
抛出错误。因此,被注释掉的try{}块和catch{}块对于检测错误而不是崩溃是有用的。
resolver.resolve(query)返回。end()而不是一个有效的迭代器,因此您可以在尝试调用connect
来自boost文档:
- @抛出boost::system::system_error失败抛出。如果序列为
- 为空,关联的@c error_code为boost::asio::error::not_found。
- 否则,包含上次尝试连接时的错误。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 使用调试/崩溃报告将应用程序部署到客户端
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 从服务器传输到客户端的消息不会出现
- OpenSSL TLS服务器-使用客户端证书白名单
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 防止客户端套接字程序崩溃CPP Google Protobuf
- 提升TCP客户端接收崩溃
- Boost Asio,异步 UDP 客户端 - 关机时崩溃
- Unix域套接字(C++)-客户端使服务器守护进程崩溃
- Winsock2错误:服务器在连接到客户端时崩溃
- zeromq: PULL/PUSH客户端在连接31后崩溃.windows上的服务器
- 调试发布构建客户端崩溃:获取调用堆栈的可能方法是什么?
- Boost TCP服务器在执行asio::write操作时客户端断开,导致服务器崩溃
- BOOST-ASIO没有服务器导致客户端崩溃