CLX C++ Libraries
Home >> sockstream

Declaration

template <
    class Socket,
    class CharT,
    class Traits = std::char_traits<CharT>
>
class basic_sockstream : public Socket, public basic_iostream<CharT, Traits>;

namespace tcp {
    typedef basic_socket<AF_INET> socket;
    typedef basic_sockstream<socket> sockstream;
};

namespace udp {
    typedef basic_socket<AF_INET> socket;
    typedef basic_sockstream<socket> sockstream;
};

Overview

TCP などのストリームタイプのデータ通信を C++ の iostream のように行うためのクラスです. 現在のところ,TCP および UDP によるデータ通信をサポートしています.

sockstream は,boost::asionamespace gimite を参考に作成しました.

Example

example_sockstream.cpp

#include <iostream>
#include <string>
#include <cstdlib>
#include "clx/tcp.h"

int main(int argc, char* argv[]) {
    if (argc < 3) return -1;
    
    try {
        /*
         * 第1引数にホスト名(またはIPアドレス),
         * 第2引数にポート番号(またはサービス名)を指定する.
         */
        clx::tcp::sockstream ss(argv[1], argv[2]);
        ss << "GET / HTTP/1.0\r\n\r\n";
        
        std::string buf;
        while (std::getline(ss, buf)) std::cout << buf << std::endl;
    }
    catch (clx::socket_error& e) {
        std::cerr << e.what() << std::endl;
        return -1;
    }
    catch (clx::sockaddress_error& e) {
        std::cerr << e.what() << std::endl;
        return -1;
    }
    
    return 0;
}

Template Parameters

Socket
TCP または UDP のソケットクラスを指定します.
CharT
文字の型を指定します.デフォルト値は,char.
Traits
文字列を扱うためのtraitsを指定します.デフォルト値は, std::char_traits<CharT>.

Related Types

typedef Socket socket_type;
typedef std::basic_iostream<CharT, Traits> iostream_type;
typedef CharT char_type;
typedef std::basic_string<CharT, Traits> string_type;
typedef basic_sockbuf<TransmitFunc, CharT, Traits> sockbuf_type;
typedef typename sockbuf::size_type size_type;

Construction and Member Functions

explicit basic_sockstream(const descriptor& s, size_type n = nbuf);
explicit basic_sockstream(const char_type* host, int port, size_type n = nbuf);
explicit basic_sockstream(const string_type& host, int port, size_type n = nbuf);
explicit basic_sockstream(const char_type* host, const char_type* service,
    size_type n = nbuf);
explicit basic_sockstream(const string_type& host, const string_type& service,
    size_type n = nbuf);
virtual ~basic_sockstream();

Related Pages

  1. CLX C++ Libraries - udp::socket
  2. CLX C++ Libraries - tcp::socket

References

  1. Boost C++ Libraries - Boost.Asio
  2. namespace gimite - C++ 小物集
  3. iostream の拡張
  4. C++ の iostream