c++ - 向其他方向发送消息时“需要目标地址”
问题描述
我有客户端和服务器应用程序。他们使用 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;
}
我的客户:
#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;
}
在哪里GOOD_RIRECTION
定义一切正常。
如果不是 - 我send: Destination address required
在第一次发送时遇到异常。
据我了解,套接字是独立于方向的,所以我在建立连接期间做了一些事情。但我无法理解究竟是什么。
更新: 从评论中我了解到 udp 中没有“连接”。
我构建了我的客户端两次(有和没有GOOD_RIRECTION
定义)。我尝试使用一个发送消息和另一个接收。在这种情况下,我没有收到第一条消息并send: Connection refused
继续发送第二条消息。
解决方案
推荐阅读
- assembly - 试图将用户输入作为循环计数器 [NASM 汇编语言]
- laravel - Laravel 5.2 Eloquent ORM 从 3 个表中获取数据
- javascript - 加载图表时显示加载微调器的问题
- django - 使用 django-import-export 导入 django
- python - 仅当 django 中的值不为空时才根据值过滤查询
- amazon-web-services - Amazon CloudFormation 如何删除特定堆栈事件并重新运行它们
- java - Kotlin 直接访问 Java 字段,而不是使用 getter/setter
- android - Firebase 规则在设置为 true 时显示权限错误
- database - 带有电子表格/数据库、自动完成、自动填充和触发操作的在线表单(或其他解决方法)
- c - 十进制到二进制的转换在某些情况下不起作用