C++ &引用;现有连接被远程主机强制关闭;侦听传入数据时
在使用boost asio时,我偶然发现了一些奇怪的行为,我不太理解。我编写了一个最小的测试程序来复制这个问题: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
#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端口无法访问消息