我正在编写一个点对点程序(不应该有服务器-这是一个任务),用于交换文本消息。它是一个非常简单的聊天程序,只有消息,没有其他内容。这是我第一次使用Boost :: Asio练习,因此我有一些问题。
正如我所说,我的聊天应该是点对点的,并且应该使用UDP协议。我认为,最好的方法是使用广播。第一个问题是:我怎样才能了解新连接?
另一个问题在于发送消息:我将其发送到广播地址,然后它会传播到本地网络中的所有计算机。这样做正确吗?
这段代码发送消息并接收其回复。就像回声一样。这是正确的吗?
正如我所说,我的聊天应该是点对点的,并且应该使用UDP协议。我认为,最好的方法是使用广播。第一个问题是:我怎样才能了解新连接?
另一个问题在于发送消息:我将其发送到广播地址,然后它会传播到本地网络中的所有计算机。这样做正确吗?
这段代码发送消息并接收其回复。就像回声一样。这是正确的吗?
#include <iostream>
#include <boost/asio.hpp>
#include <boost/array.hpp>
int main()
{
try
{
namespace ip = boost::asio::ip;
boost::asio::io_service io_service;
ip::udp::socket socket(io_service,
ip::udp::endpoint(ip::udp::v4(), 1555));
socket.set_option(boost::asio::socket_base::broadcast(true));
ip::udp::endpoint broadcast_endpoint(ip::address_v4::broadcast(), 1555);
boost::array<char, 4> buffer1;
socket.send_to(boost::asio::buffer(buffer1), broadcast_endpoint);
ip::udp::endpoint sender_endpoint;
boost::array<char, 4> buffer2;
std::size_t bytes_transferred =
socket.receive_from(boost::asio::buffer(buffer2), sender_endpoint);
std::cout << "got " << bytes_transferred << " bytes." << std::endl;
}
catch (std::exception &e)
{
std::cerr << e.what();
}
system("PAUSE");
return 0;
}