acceptor Sınıfı
acceptor Sınıfı yazısına taşıdım.
endpoint Sınıfı
acceptor Sınıfı yazısına taşıdım.
endpoint Sınıfı
Constructor - Port
Sınıf şöyle kurulur. Endpoint bir ip adresi ve bir de port numarasından oluşur.
string ve port numarasından şöyle kurarız.
Şöyle yaparız.
address değerini verir. Şöyle yaparız.
Şöyle yaparız. Bağlanmak için connect metodu çağrılır.
Şöyle yaparız.
good metodu
Sınıf şöyle kurulur. Endpoint bir ip adresi ve bir de port numarasından oluşur.
asio::ip::tcp::endpoint end(asio::ip::tcp::v4(), 1234);
Constructor - IP + Portstring ve port numarasından şöyle kurarız.
std::string HostName = "...";const int Port = ...;
asio::ip::tcp::endpoint e(asio::ip::address::from_string(HostName), Port);
Constructor - ResolverŞöyle yaparız.
tcp::resolver resolver = ...;
tcp::resolver::query query (host, port);
tcp::resolver::iterator it = resolver.resolve(query);
tcp::endpoint endpoint = *it;
address metodu - getteraddress değerini verir. Şöyle yaparız.
std::string s = socket.remote_endpoint().address().to_string();
address metodu - setter
Şöyle yaparız.
Şöyle yaparız.
ConstructorŞöyle yaparız.
tcp::endpoint endpoint;endpoint.address(boost::asio::ip::address_v4::from_string("127.0.0.1"));
port metod - setterŞöyle yaparız.
tcp::endpoint endpoint;
endpoint.port(90);
iostream SınıfıŞöyle yaparız. Bağlanmak için connect metodu çağrılır.
boost::asio::ip::tcp::iostream stream;
Constructor - hostname + portŞöyle yaparız.
string hostname = ...;
boost::asio::ip::tcp::iostream stream (hostname, "http");
connect metodu
stream.connect ("localhost", "12345");
Şöyle yaparız.
tcp socket Sınıfı yazısına taşıdım.
query Sınıfı
Constructor
Verilen query nesnesini endpoint'e çevirir. Sınıf şöyle kurulur.
resolve metodu şöyle kullanılır.
Şöyle sorgulanır.
if(!stream.good()){
throw runtime_error("...");
}
opertor << Şöyle yaparız.stream << "Test" <<std::endl;
Şöyle yaparız.stream << "GET " << path << " HTTP/1.0\r\n" << "Host: " << hostname << "\r\n";
stream << "Accept: */*\r\n" << "Connection: close\r\n\r\n";
stream << flush;
Stream aynı zamanda STL algoritmaları ile de kullanılabilir.
string lineContent;
while(getline(stream, lineContent)){
...
}
rdbuf metodu
Sokette okumaya hazır veriyi öğrenmek için şöyle yaparız.
Şöyle yaparız.
socket SınıfıSokette okumaya hazır veriyi öğrenmek için şöyle yaparız.
// Block until 6 bytes are available.
while (stream.rdbuf()->available() < 6)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
}
read metoduŞöyle yaparız.
/// @brief Read up to `n` characters from `stream` and store them
/// into `buffer` without blocking. This may not read all
/// of the requested amount of bytes.
template <typename... Args>
std::streamsize readsome(
boost::asio::basic_socket_iostream<Args...>& stream,
char* buffer,
std::streamsize n)
{
std::streamsize available =
stream.rdbuf()->in_avail() // available on input sequence
+ stream.rdbuf()->available(); // available on socket
n = std::min(n, available);
if (n == 0) return 0;
stream.read(buffer, n);
return n;
}
read_some metodu
Şöyle yaparız.char inp[6]={0,0,0,0,0,0};
size_t r = stream.read_some (inp,5);
tcp socket Sınıfı yazısına taşıdım.
query Sınıfı
Constructor
Sınıf şöyle kurulur.
Sınıf şöyle kurulur.
asio::tcp::resolver::query query(tcp::v4(),"10.0.0.16",80);
Kendi bilgisayar ismimiz için şöyle kurulur.
asio::ip::tcp::resolver::query query(boost::asio::ip::host_name(),"");
resolver Sınıfı
Bu sınıfın kardeşi udp isim alanı altında mevcuttur.Constructor
Verilen query nesnesini endpoint'e çevirir. Sınıf şöyle kurulur.
asio::ip::tcp::resolver (io_svc)
resolve metoduresolve metodu şöyle kullanılır.
ip::tcp::resolver resolver(my_io_service);
ip::tcp::resolver::query query("www.boost.org", "http");
ip::tcp::resolver::iterator iter = resolver.resolve(query);
ip::tcp::resolver::iterator end; // End marker.
while (iter != end)
{
ip::tcp::endpoint endpoint = *iter++;
std::cout << endpoint << std::endl;
}
async_resolve metoduŞöyle sorgulanır.
resolver.async_resolve(
query,
boost::bind(
&MyClass::handle_resolve,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
resolve callback completion şuna benzer.void MyClass::handle_resolve(
const boost::system::error_code & error,
boost::asio::ip::tcp::resolver::iterator endpoint_itr)
{
if (!error)
{
boost::asio::ip::tcp::endpoint endpoint = *endpoint_itr;
socket_.async_connect(
endpoint,
boost::bind(
&Session::handle_connect,
this,
boost::asio::placeholders::error,
++endpoint_itr));
}
else
{
std::cerr << "Failed to resolve\n";
std::cerr << "Error: " << error.message() << std::endl;
}
}
Bir başka örnek#include <boost/asio/io_service.hpp>
#include <boost/asio/write.hpp>
#include <boost/asio/buffer.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <array>
#include <string>
#include <iostream>
using namespace boost::asio;
using namespace boost::asio::ip;
using namespace std;
void resolve_handler(const boost::system::error_code &ec,
tcp::resolver::iterator it)
{
tcp::resolver::iterator end;
for (; it != end; ++it) {
cout << it->host_name() << endl;
}
}
int main()
{
io_service ioservice;
tcp::resolver resolv{ioservice};
tcp::endpoint endpoint{address::from_string("74.125.239.48"), 80};
resolv.async_resolve(endpoint, resolve_handler);
ioservice.run();
return 0;
}
Hiç yorum yok:
Yorum Gönder