# FBB::ClientSocket(3bobcat)

## Client Socket
(libbobcat-dev_6.02.02)

## 2005-2022

## NAME

FBB::ClientSocket - Client Socket connecting to a Server in the Internet

## SYNOPSIS

#include <bobcat/clientsocket>
Linking option: -lbobcat

## DESCRIPTION

An FBB::ClientSocket may be constructed to connect to some server process in the internet. The socket made available by the FBB:ClientSocket may be used to initialize a std::istream and/or std::ostream. The std::istream is used to read information from the server process to which the FBB::ClientSocket connects, The std::ostream is used to send information to the server process to which the FBB::ClientSocket connects. Since a socket may be considered a file descriptor the available FBB::IFdStream, FBB::IFdStreamBuf, FBB::OFdStream, and FBB::OFdStreamBuf classes may be used profitably here. Note that having available a socket does not mean that this defines the communication protocol. It is (still) the responsibility of the programmer to comply with an existing protocol or to implement a tailor-made protocol. The latter situation implies that the sequence of input- and output operations is defined by the programmer.

A Unix Domain client socket can be defined using FBB::LocalClientSocket.

## NAMESPACE

FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace FBB.

## INHERITS FROM

FBB::SocketBase

## CONSTRUCTOR

- ClientSocket(std::string const &host, uint16_t port):
  This constructor initializes an FBB::ClientSocket object, preparing it for a connection to the specified port at the given host. An FBB::Exception is thrown if the socket could not be constructed. The construction of the socket does not mean that a connection has actually been established. In order to connect to the server, the member connect() (see below) should be used.

Copy and move constructors (and assignment operators) are not available.

## MEMBER FUNCTIONS

All members of FBB::SocketBase (and thus of FBB::InetAddress) are available, as FBB::ClientSocket inherits from these classes.

- int connect():
  This member returns a socket that can be used to communicate with the server process. An FBB::Exception exception is thrown if the connection could not be established or if the SocketBase base class could not properly be constructed.

## EXAMPLE

See also the serversocket(3bobcat) example.

        #include <iostream>
        #include <string>
        #include <bobcat/clientsocket>
        #include <bobcat/ifdstream>
        #include <bobcat/ofdstream>

        using namespace std;
        using namespace FBB;

        int main(int argc, char **argv)
        try
        {
            if (argc == 1)
            {
                cerr << "Provide servername and port number\n";
                return 1;
            }

            size_t     port = stoul(argv[2]);
            ClientSocket client(argv[1], port);
            int fd = client.connect();
            string line;

            cout << "Connecting to socket " << fd << endl <<
                    "address = " << client.dottedDecimalAddress() << ", " <<
                                                                     endl <<
                    "communication through port " << client.port() << endl;

            IFdStream in(fd);                 // stream to read from
            OFdStream out(fd);                // stream to write to

            while (true)
            {
                                        // Ask for a textline, stop if
                cout << "? ";           // empty / none
                if (!getline(cin, line) || line.length() == 0)
                    return 0;
                cout << "Line read: " << line << endl;

                                        // Return the line to the server
                out << line.c_str() << endl;
                cout << "wrote line\n";

                getline(in, line);      // Wait for a reply from the server
                cout << "Answer: " << line << endl;
            }
        }
        catch (Exception const &err)
        {
            cerr << err.what() << "\n" <<
                    "Can't connect to " << argv[1] << ", port " <<
                    argv[2] << endl;
            return 1;
        }

## FILES

bobcat/clientsocket - defines the class interface

## SEE ALSO

bobcat(7), ifdstream(3bobcat), ifdbuf(3bobcat), inetaddress(3bobcat), localclientsocket(3bobcat), ofdstream(3bobcat), ofdstream(3bobcat), serversocket(3bobcat), socketbase(3bobcat)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- https://fbb-git.gitlab.io/bobcat/: gitlab project page;
- bobcat_6.02.02-x.dsc: detached signature;
- bobcat_6.02.02-x.tar.gz: source archive;
- bobcat_6.02.02-x_i386.changes: change log;
- libbobcat1_6.02.02-x_*.deb: debian package containing the libraries;
- libbobcat1-dev_6.02.02-x_*.deb: debian package containing the libraries, headers and manual pages;

## BOBCAT

Bobcat is an acronym of `Brokken's Own Base Classes And Templates'.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (f.b.brokken@rug.nl).