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++_Sockets_Boost_Udp_Boost Asio - Fatal编程技术网

C++ &引用;“需要目的地地址”;当向其他方向发送消息时

C++ &引用;“需要目的地地址”;当向其他方向发送消息时,c++,sockets,boost,udp,boost-asio,C++,Sockets,Boost,Udp,Boost Asio,我有客户端和服务器应用程序。他们使用udp套接字进行通信 我可以从客户端发送一些消息,然后在服务器上接收。但我不能向其他方向发送消息 我修改并增强了示例 我的服务器: #include <cstdlib> #include <iostream> #include <string> #include <boost/asio.hpp> using boost::asio::ip::udp; enum { max_length = 1024 };

我有客户端和服务器应用程序。他们使用udp套接字进行通信

我可以从客户端发送一些消息,然后在服务器上接收。但我不能向其他方向发送消息

我修改并增强了示例

我的服务器:

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

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

enum { max_length = 1024 };

int main(int argc, char* argv[]) {
    try {
        if (argc != 2) {
            std::cerr << "<port>\n";
            return 1;
        }

        boost::asio::io_context io_context;
        int port = std::atoi(argv[1]);
        udp::endpoint endpoint(udp::v4(), port);
        udp::socket *socket = new udp::socket(io_context, endpoint);

        std::cout << "starting loop\n";
        while(true) {
#ifdef GOOD_RIRECTION
            char data[max_length];
            size_t len = socket->receive(boost::asio::buffer(data, max_length));
            std::cout << "Recieved: "<< std::string(data, len) << '\n';
#else

            std::cout << "Enter message: ";
            char request[max_length];
            std::cin.getline(request, max_length);
            size_t request_length = std::strlen(request);
            socket->send(boost::asio::buffer(request, request_length));
#endif
        }
    } catch (std::exception& e) {
        std::cerr << "Exception: " << e.what() << "\n";
    }

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

std::cerr udp中没有连接。每条消息都必须明确说明其目的地(每条消息的目的地可能不同)。此外,消息可能会丢失,它们可能会无序到达,甚至可能到达两次,如果您使用udp,您的应用程序必须准备好处理。确定。这是有意义的。据我所知,我需要在发送消息的一侧使用IPAddress?您需要。这意味着您必须通过使用
而不是
接收
来检索它。并且然后用
send\u to
发送回复,而不是
send
。我的电话在接到电话时工作。。。
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>

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

enum { max_length = 1024 };

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

        boost::asio::io_context io_context;

        udp::socket *socket = new udp::socket(io_context);
        udp::resolver resolver(io_context);
        udp::resolver::results_type endpoints =  resolver.resolve(udp::v4(), argv[1], argv[2]);
        socket->connect(*endpoints.begin());

        std::cout << "starting loop\n";
        while (true) {
#ifdef GOOD_RIRECTION
            std::cout << "Enter message: ";
            char request[max_length];
            std::cin.getline(request, max_length);
            size_t request_length = std::strlen(request);
            socket->send(boost::asio::buffer(request, request_length));
#else

            char data[max_length];
            size_t len = socket->receive(boost::asio::buffer(data, max_length));
            std::cout << "Recieved: "<< std::string(data, len) << '\n';
#endif
        }
    } catch (std::exception& e) {
        std::cerr << "Exception: " << e.what() << "\n";
    }
    return 0;
}