Giriş
Şu satırı dahil ederiz.
Constructor
İstemci ise daha sonra connect() çağrısı ile bağlanmak gerekir. Sunucu ise tcp::acceptor ile dinlemek gerekir. Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Örnek
Şöyle yaparız.
Şöyle yaparız
basic_socket_streambuf nesnesini döner. Bu nesne de basic_socket sınıfından kalıttığı için alttaki sockete erişilebilir.
Örnek
Sunucunun cevabını okumak için şöyle yaparız
Daha önceden açılmış bir socketi atamak için şöyle yaparız.
Daha önceden açılmış bir socketi atamak için şöyle yaparız.
Şu satırı dahil ederiz.
#include <boost/asio.hpp>
Daha rahat kullanmak için şöyle yaparız.using boost::asio::ip::tcp;
Bu sınıf aynı bir stream gibi kullanıldığı için tcp socket sınıfına göre kullanması daha kolay olabilir. Bu sınıfta asenkron metodlar yok, zaten amacı da bu.
Constructor
İstemci ise daha sonra connect() çağrısı ile bağlanmak gerekir. Sunucu ise tcp::acceptor ile dinlemek gerekir. Şöyle yaparız.
boost::asio::ip::tcp::iostream ss;
Constructor - İstemci (ip + port)Şöyle yaparız.
boost::asio::ip::tcp::iostream ss ("127.0.0.1", "3000");
Constructor - İstemci (ip + port)Şöyle yaparız.
tcp::iostream ss (tcp::resolver::query { "127.0.0.1", "3780" });
Şöyle yaparız.tcp::iostream ss (tcp::resolver::query{ "127.0.0.1", "6293" });
Constructor - İstemci - (host + string)
Şöyle yaparız
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız
tcp::iostream ss ("localhost", "http");
clear metoduŞöyle yaparız.
using boost::asio::ip::tcp;
int main() {
tcp::iostream stream;
do {
std::cout << "Connecting...\n";
stream.clear();
stream.connect("127.0.0.1", "4444");
std::this_thread::sleep_for(std::chrono::milliseconds(500));
} while (!stream);
std::cout << "Connected! " << stream.rdbuf();
close metoduŞöyle yaparız.
ss.close();
connect metoduŞöyle yaparız.
stream.connect("127.0.0.1", "4444");
eof metoduŞöyle yaparız.
if (ss.eof()) {
cout << "eof" << endl;
ss.close();
}
expires_from_now metodu
İstemci olarak şöyle yaparız.
boost::asio::ip::tcp::iostream ss;
ss.expires_from_now(boost::posix_time::seconds(60));
ss.connect("ip-api.com", "http");
ss << "GET /xml HTTP/1.0\r\n";
ss << "Host: ip-api.com\r\n";
ss << "Accept: */*\r\n";
ss << "Connection: close\r\n\r\n";
ss.flush();
getline metodu
Şöyle yaparız.
char res[255];
std::stringstream srtss;
while (!ss.eof()) {
ss.getline(res, 255);
strss << res << "\n";
}
operator bool metodu
Şöyle yaparız.if (!ss) {...}
operator << metoduÖrnek
Şöyle yaparız.
ss << ...;
ÖrnekŞöyle yaparız
s << "GET / HTTP/1.0\r\n\r\n" << std::flush;
rdbuf metodubasic_socket_streambuf nesnesini döner. Bu nesne de basic_socket sınıfından kalıttığı için alttaki sockete erişilebilir.
Örnek
Sunucunun cevabını okumak için şöyle yaparız
tcp::iostream ss ("localhost", "http");
ss << "GET / HTTP/1.0\r\n\r\n" << std::flush;
std::cout << ss.rdbuf(); // print response
Örnek - rdbuf()->assign metoduDaha önceden açılmış bir socketi atamak için şöyle yaparız.
tcp::socket s(svc);
s.connect(tcp::endpoint {{}, 6767});
tcp::iostream stream;
stream.rdbuf()->assign(tcp::v4(), s.native_handle());
std::cout << stream.rdbuf() << std::flush;
Örnek - rdbuf()->socket metoduDaha önceden açılmış bir socketi atamak için şöyle yaparız.
#include <boost/asio.hpp>
namespace ba = boost::asio;
using ba::ip::tcp;
int main() {
ba::io_service ios;
tcp::socket s(ios);
// e.g. connect to test service
s.connect({{}, 6767});
tcp::iostream ss;
ss.rdbuf()->socket() = std::move(s);
for (std::string line; getline(stream, line);) {
std::reverse(line.begin(), line.end());
stream << line << std::endl;
}
}
Örnek - *rdbuf()
Şöyle yaparız.boost::asio::ip::tcp::acceptor acceptor = ...;
boost::asio::ip::tcp::iostream stream;
acceptor.accept(*stream.rdbuf());
Örnek *rdbuf() + error_code
Şöyle yaparız.tcp::acceptor acceptor = ...;
tcp::iostream ss;
boost::system::error_code ec;
acceptor.accept (*ss.rdbuf(), ec);
Diğer
std::string'e çevirme
Şöyle yaparız
Veriyi sıkıştırarak göndermek için şöyle yaparız.
Veriyi açarak göndermek için şöyle yaparız.
std::string'e çevirme
Şöyle yaparız
boost::asio::ip::tcp::iostream ss;
ss.expires_from_now(boost::posix_time::seconds(2));
ss.connect("ip-api.com", "80");
ss << "GET /xml HTTP/1.0\r\n";
ss << "Host: ip-api.com\r\n";
ss << "Accept: */*\r\n";
ss << "Connection: close\r\n\r\n";
ss.flush();
std::string const response(std::istreambuf_iterator<char>(ss), {});
filtering_ostream ile kullanımıVeriyi sıkıştırarak göndermek için şöyle yaparız.
tcp::iostream ss = ...;
boost::iostreams::filtering_ostream out;
out.push (boost::iostreams::zlib_compressor());
out.push (ss);
std::ifstream ifs("main.cpp", std::ios::binary);
out << ifs.rdbuf();
out.flush();
filtering_istream ile kullanımıVeriyi açarak göndermek için şöyle yaparız.
tcp::iostream ss = ...;
boost::iostreams::filtering_istream in;
in.push (boost::iostreams::zlib_decompressor());
in.push (ss);
std::ofstream ofs ("main.cpp" , std::ios::binary);
boost::iostreams::copy (in, ofs);
Hiç yorum yok:
Yorum Gönder