File: clientsocket.yo

package info (click to toggle)
bobcat 6.02.02-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 13,960 kB
  • sloc: cpp: 18,954; fortran: 5,617; makefile: 2,787; sh: 659; perl: 401; ansic: 26
file content (133 lines) | stat: -rw-r--r-- 4,794 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
includefile(include/header)

COMMENT(manpage, section, releasedate, archive, short name)
manpage(FBB::ClientSocket)(3bobcat)(_CurYrs_)(libbobcat-dev__CurVers_)
                    (Client Socket)

manpagename(FBB::ClientSocket)
            (Client Socket connecting to a Server in the Internet)

manpagesynopsis()
    bf(#include <bobcat/clientsocket>)nl()
    Linking option: tt(-lbobcat)

manpagedescription()
    An bf(FBB::ClientSocket) may be constructed to connect to some server
process in the internet. The socket made available by the bf(FBB:ClientSocket)
may be used to initialize a bf(std::istream) and/or bf(std::ostream). The
bf(std::istream) is used to read information from the server process to which
the bf(FBB::ClientSocket) connects, The bf(std::ostream) is used to send
information to the server process to which the bf(FBB::ClientSocket) connects.
Since a socket may be considered a em(file descriptor) the available
bf(FBB::IFdStream), bf(FBB::IFdStreamBuf), bf(FBB::OFdStream), and
bf(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
tt(FBB::LocalClientSocket).

includefile(include/namespace)

manpagesection(INHERITS FROM)
    bf(FBB::SocketBase)

manpagesection(CONSTRUCTOR)
    itemization(
    itb(ClientSocket(std::string const &host, uint16_t port))
        This constructor initializes an bf(FBB::ClientSocket) object,
preparing it for a connection to the specified port at the given host.  An
bf(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 bf(connect()) (see
below) should be used.
    )

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

manpagesection(MEMBER FUNCTIONS)
     All members of bf(FBB::SocketBase) (and thus of bf(FBB::InetAddress)) are
available, as bf(FBB::ClientSocket) inherits from these classes.
    itemization(
    itb(int connect())
        This member returns a socket that can be used to communicate with the
server process. An bf(FBB::Exception) exception is thrown if the connection
could not be established or if the bf(SocketBase) base class could not
properly be constructed.
    )

manpagesection(EXAMPLE)
    See also the bf(serversocket)(3bobcat) example.
        verb(
    #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;
    }
        )

manpagefiles()
    em(bobcat/clientsocket) - defines the class interface

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

manpagebugs()
    None Reported.

includefile(include/trailer)