Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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++;udp boost客户端不';无法接收udp消息_C++_Sockets_Boost_Udp_Client - Fatal编程技术网

C++ C++;udp boost客户端不';无法接收udp消息

C++ C++;udp boost客户端不';无法接收udp消息,c++,sockets,boost,udp,client,C++,Sockets,Boost,Udp,Client,当我跑步时: nc -ul <ip address> <port> nc-ul 我从udp服务器接收消息。但是,当我尝试用下面的C++程序来复制等价的Boost时,它就从 #include <iostream> #include <boost/array.hpp> #include <boost/asio.hpp> using boost::asio::ip::udp; int main(int argc, char *argv

当我跑步时:

nc -ul <ip address> <port>
nc-ul
我从udp服务器接收消息。但是,当我尝试用下面的C++程序来复制等价的Boost时,它就从
#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>

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

int main(int argc, char *argv[]) {
    try {
        if (argc != 3) {
            std::cerr << "Usage: client <host> <port>" << std::endl;
            return 1;
        }

        boost::asio::io_context ioContext;

        udp::resolver resolver(ioContext);
        udp::resolver::query query(udp::v4(), argv[1], argv[2]);
        udp::endpoint endpoint = *resolver.resolve(query);

        udp::socket socket(ioContext);
        socket.open(udp::v4());

//        boost::array<char, 1> sendBuf = {0};
//        socket.send_to(boost::asio::buffer(sendBuf), endpoint);

        char letter = 0;
        udp::endpoint sender_endpoint;
        while(socket.receive_from(boost::asio::buffer(&letter, 1), endpoint)) {
            std::cout << letter;
        }
    }
    catch (std::exception &e) {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}
#包括
#包括
#包括
使用boost::asio::ip::udp;
int main(int argc,char*argv[]){
试一试{
如果(argc!=3){

std::cerr我测试了以下代码成功接收消息。
udp::resolver
在代码中不是必需的,因为您没有发送任何消息,而是接收消息

在您的案例中打开套接字时,您应该指定UDP需要数据的端口号。这可以通过向
UDP::socket
传递第二个参数来完成。但是,您文章中的第二个示例不需要这样做,因为它正在重用其端点-
sender\u端点

receive\u from()
使用其第二个参数存储发件人的端点。您不应传递对等方的端点,而应传递一个变量以保留消息的来源

int main(int argc, char* argv[]) {
    try {
        if (argc != 3) {
            std::cerr << "Usage: client <host> <port>" << std::endl;
            return 1;
        }

        boost::asio::io_context ioContext;
        udp::socket socket(ioContext, udp::endpoint(udp::v4(), 6078));  // designated port
        
        char letter = 0;
        udp::endpoint ep_sender;
        while (socket.receive_from(boost::asio::buffer(&letter, 1), ep_sender)) {
            std::cout << letter;
            //std::cout << ep_sender.address().to_string() << endl; // sender's address.
        }

        return 0;
    }
    catch (std::exception& e) {
        std::cerr << e.what() << std::endl;
    }
}
intmain(intargc,char*argv[]){
试一试{
如果(argc!=3){
标准:cerr
int main(int argc, char* argv[]) {
    try {
        if (argc != 3) {
            std::cerr << "Usage: client <host> <port>" << std::endl;
            return 1;
        }

        boost::asio::io_context ioContext;
        udp::socket socket(ioContext, udp::endpoint(udp::v4(), 6078));  // designated port
        
        char letter = 0;
        udp::endpoint ep_sender;
        while (socket.receive_from(boost::asio::buffer(&letter, 1), ep_sender)) {
            std::cout << letter;
            //std::cout << ep_sender.address().to_string() << endl; // sender's address.
        }

        return 0;
    }
    catch (std::exception& e) {
        std::cerr << e.what() << std::endl;
    }
}