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
|
#include <iostream>
#include <stream>
#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;
unsigned long addr =
const_cast<ClientSocket const &>(client).sockaddr_inPtr()->
sin_addr.s_addr;
cout << "Connecting to socket " << fd << endl <<
"address = " << client.dottedDecimalAddress() << ", (" <<
addr << ")\n"
"communication through port " << client.port() << endl;
IFdStream in(fd); // stream to read from
OFdStream out(fd); // stream to write to
unsigned long sPort;
in >> sPort;
in.ignore(100, '\n'); // get the port used by the server
sPort ^= addr;
cout << "Server uses port " << sPort << '\n';
while (true)
{
// Ask for a textline, stop if empty / none
cout << "? ";
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";
// Wait for a reply from the server
getline(in, line);
cout << "Answer: " << line << endl;
}
}
catch (exception const &err)
{
cerr << err.what() << "\n" <<
"Can't connect to " << argv[1] << ", port " << argv[2] << endl;
return 1;
}
|