Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;现有连接被远程主机强制关闭;侦听传入数据时_C++_Windows_Networking_Listener_Boost Asio - Fatal编程技术网

C++ &引用;现有连接被远程主机强制关闭;侦听传入数据时

C++ &引用;现有连接被远程主机强制关闭;侦听传入数据时,c++,windows,networking,listener,boost-asio,C++,Windows,Networking,Listener,Boost Asio,在使用boost asio时,我偶然发现了一些奇怪的行为,我不太理解。我编写了一个最小的测试程序来复制这个问题: #include <boost/asio.hpp> #include <iostream> using boost::asio::ip::udp; int main(int argc,char *argv[]) { boost::asio::io_service ioService; udp::resolver resolver(ioSer

在使用boost asio时,我偶然发现了一些奇怪的行为,我不太理解。我编写了一个最小的测试程序来复制这个问题:

#include <boost/asio.hpp>
#include <iostream>

using boost::asio::ip::udp;

int main(int argc,char *argv[])
{
    boost::asio::io_service ioService;
    udp::resolver resolver(ioService);

    udp::resolver::query queryListen("127.0.0.1","50001");
    auto epListen = *resolver.resolve(queryListen);
    udp::socket socket(ioService,epListen);

    udp::resolver::query querySend("127.0.0.1","55006");
    auto epSend = *resolver.resolve(querySend);
    boost::system::error_code err;
    std::array<char,12> buffer = {'1','2','3','4','5','6','7','8','9','10','11','12'};
    socket.send_to(
        boost::asio::buffer(&buffer[0],buffer.size()),
        epSend,0,err
    );
    if(!err)
    {
        std::cout<<"Sent successfully!"<<std::endl;
        auto numBytes = socket.receive(
            boost::asio::buffer(&buffer[0],buffer.size()),0,
            err
        );
        if(!err)
            std::cout<<"Received "<<numBytes<<" bytes successfully!"<<std::endl;
        else
            std::cout<<"Unable to receive: "<<err.message()<<std::endl; // This is where I'm getting the message "An existing connection was forcibly closed by the remote host"
    }
    else
        std::cout<<"Unable to send: "<<err.message()<<std::endl;
    for(;;);
    return 0;
}
#包括
#包括
使用boost::asio::ip::udp;
int main(int argc,char*argv[])
{
boost::asio::io_服务ioService;
udp::解析器解析器(ioService);
udp::resolver::QueryQueryListen(“127.0.0.1”、“50001”);
auto-epListen=*resolver.resolve(queryListen);
套接字套接字(ioService,epListen);
udp::resolver::query querySend(“127.0.0.1”、“55006”);
auto-epSend=*解析器.resolve(querySend);
boost::system::error\u code err;
数组缓冲区={'1','2','3','4','5','6','7','8','9','10','11','12'};
socket.send_到(
boost::asio::buffer(&buffer[0],buffer.size()),
epSend,0,err
);
如果(!err)
{

std::cout虽然UDP通常被称为无连接协议,但上下文意味着无状态协议。因此,允许返回一些与连接相关的错误消息:

UDP套接字上的发送或接收记录的或可能返回的所有错误

经济融合
没有接收器与目标地址关联。这可能是由通过套接字发送的前一个数据包造成的

Winsock函数说明,对于UDP,如果先前的发送操作导致ICMP端口不可访问消息,则函数将出现错误,错误为
WSAECONNRESET

WSAECONNRESET
[…]在UDP数据报套接字上,此错误表示以前的发送操作导致ICMP端口无法访问消息