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;
}
}