使用一个TCP套接字的多个请求

亚伯拉罕

我正在学习套接字编程(和C ++)。我写了一个下面的函数,要求一个数组的总和(使用boost库):

std::future<void> AsyncClient::ReqSum(const std::vector<double>& numbers)
{
    return std::async(
        std::launch::async,
        [&, numbers]()
        {
            // Setup connection.
            boost::asio::io_service _ioservice;
            tcp::socket _socket(_ioservice);
            _socket.connect(m_endpoint);

            std::string requestJson = Serializer::ArraySumRequest(numbers);
            boost::system::error_code err;
            while (true)
            {
                boost::asio::write(_socket, boost::asio::buffer(requestJson), err);
                if (err)
                {
                    std::stringstream ss;
                    ss << "Couldn't write to socket! error code: " << err;
                    throw ss.str();
                }

                // getting response from server
                boost::asio::streambuf receiveBuffer;
                boost::asio::read(_socket, receiveBuffer, boost::asio::transfer_all(), err);

                if (err && err != boost::asio::error::eof)
                {
                    std::stringstream ss;
                    ss << "Receiving from the server failed! error code: " << err.message();
                    throw ss.str();
                }

                const char* data = boost::asio::buffer_cast<const char*>(receiveBuffer.data());

                rapidjson::Document doc;
                doc.Parse<rapidjson::kParseDefaultFlags>(data);

                if (!doc.HasMember("result"))
                    throw "No result found!";

                double result = doc["result"].GetDouble();

                std::cout << "Sum of the array: " << result << std::endl;
            }
            _socket.shutdown(boost::asio::socket_base::shutdown_both);
            _socket.close();
        });
}

第一次写入和读取都可以正常工作,但是第二次我进入循环写入套接字可以正常工作,但是读取时出现错误:

错误代码:10053;消息:建立的连接被您的计算机主机中的软件中止。

这个错误与我的机器有关吗?我该怎么做?

G.睡觉

您似乎正在尝试从服务器接收所有数据:

boost::asio::streambuf receiveBuffer;
boost::asio::read(_socket, receiveBuffer, boost::asio::transfer_all(), err);

read()命令完成的唯一方法是服务器指示流的结尾。由于您是第一次收到有效的响应,这意味着服务器在向您发送响应后立即关闭了连接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过 Angular httpClient 中的一个套接字连接发出多个请求?

来自分类Dev

创建一个能够每秒处理数千个请求的 TCP 套接字服务器

来自分类Dev

Rust TCP套接字服务器仅使用一个连接

来自分类Dev

通过多个套接字传输文件比仅使用一个套接字传输文件快吗?

来自分类Dev

每当您要发送请求而影响性能时,打开一个TCP套接字需要多少费用?

来自分类Dev

TCP 套接字客户端和服务器在一个程序中使用 c Linux

来自分类Dev

重复使用套接字还是每次都创建一个新套接字?

来自分类Dev

在客户端应用程序上将一个套接字与多个窗口一起使用

来自分类Dev

建立tcp连接时给套接字一个什么样的地址?

来自分类Dev

建立tcp连接时,给套接字一个什么样的地址?

来自分类Dev

创建一个新的TCP套接字-服务器端

来自分类Dev

什么是更好的做法,则创建一个具有多个连接的UNIX套接字或创建一个连接的多个套接字?

来自分类Dev

AsyncTask创建一个套接字

来自分类Dev

创建一个套接字C ++

来自分类Dev

如何使用PHP创建到同一主机的多个持久套接字连接TCP / IP

来自分类Dev

C中的套接字未满足第一个客户端请求

来自分类Dev

在Python中从一个类创建多个tcp套接字处理程序

来自分类Dev

我应该使用网络套接字从服务器提取数据还是只使用一个标志并使用该标志发送 API 数据请求?

来自分类Dev

服务器可以在一个线程中处理多个套接字吗?

来自分类Dev

WinSock2 C ++-多个套接字存储为一个

来自分类Dev

“多个文件描述符引用同一个套接字”是如何创建的?

来自分类Dev

哪种策略更有效:创建一个新的套接字或使用已经创建的套接字?

来自分类Dev

一个系统(计算机)可以处理多少个TCP / IP套接字连接?

来自分类Dev

在另一个进程已经使用的套接字中使用“ t”

来自分类Dev

使用线程在UDP聊天中使用一个套接字

来自分类Dev

如何使用一个请求DRF创建多个对象

来自分类Dev

使用套接字的HTTP请求

来自分类Dev

使用rxjs创建一个可观察对象,稍后将其连接到Web套接字

来自分类Dev

对一个套接字使用zmq_recv和ZMQ_NOBLOCK与zmq_poll

Related 相关文章

  1. 1

    如何通过 Angular httpClient 中的一个套接字连接发出多个请求?

  2. 2

    创建一个能够每秒处理数千个请求的 TCP 套接字服务器

  3. 3

    Rust TCP套接字服务器仅使用一个连接

  4. 4

    通过多个套接字传输文件比仅使用一个套接字传输文件快吗?

  5. 5

    每当您要发送请求而影响性能时,打开一个TCP套接字需要多少费用?

  6. 6

    TCP 套接字客户端和服务器在一个程序中使用 c Linux

  7. 7

    重复使用套接字还是每次都创建一个新套接字?

  8. 8

    在客户端应用程序上将一个套接字与多个窗口一起使用

  9. 9

    建立tcp连接时给套接字一个什么样的地址?

  10. 10

    建立tcp连接时,给套接字一个什么样的地址?

  11. 11

    创建一个新的TCP套接字-服务器端

  12. 12

    什么是更好的做法,则创建一个具有多个连接的UNIX套接字或创建一个连接的多个套接字?

  13. 13

    AsyncTask创建一个套接字

  14. 14

    创建一个套接字C ++

  15. 15

    如何使用PHP创建到同一主机的多个持久套接字连接TCP / IP

  16. 16

    C中的套接字未满足第一个客户端请求

  17. 17

    在Python中从一个类创建多个tcp套接字处理程序

  18. 18

    我应该使用网络套接字从服务器提取数据还是只使用一个标志并使用该标志发送 API 数据请求?

  19. 19

    服务器可以在一个线程中处理多个套接字吗?

  20. 20

    WinSock2 C ++-多个套接字存储为一个

  21. 21

    “多个文件描述符引用同一个套接字”是如何创建的?

  22. 22

    哪种策略更有效:创建一个新的套接字或使用已经创建的套接字?

  23. 23

    一个系统(计算机)可以处理多少个TCP / IP套接字连接?

  24. 24

    在另一个进程已经使用的套接字中使用“ t”

  25. 25

    使用线程在UDP聊天中使用一个套接字

  26. 26

    如何使用一个请求DRF创建多个对象

  27. 27

    使用套接字的HTTP请求

  28. 28

    使用rxjs创建一个可观察对象,稍后将其连接到Web套接字

  29. 29

    对一个套接字使用zmq_recv和ZMQ_NOBLOCK与zmq_poll

热门标签

归档