client and server programs

Hello,

Looking at the asio.sourceforge.net library, I found a tutorial to develop simple client and server programs. Below I am pasting the client and the server. On my Fedora Core 4, I can compile the two programs(client is 'a' and server is 'daytime', but I have no idea on how to test them...
./a
returns
Usage: client <host>
while
./daytime
returns
Permission denied

What should I do to make the two programs talk to each other? I am sure it is pretty basic here but I cannot seem to figure it out. I am posting on this forum because it looks to me that this is more a unix question than an asio one.
thanks in advance
Regards,

SERVER

 
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

int main()
{
  try
  {
    boost::asio::io_service io_service;

    tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));

    for (;;)
    {
      tcp::socket socket(io_service);
      acceptor.accept(socket);

      std::string message = make_daytime_string();

      boost::asio::write(socket, boost::asio::buffer(message),
          boost::asio::transfer_all(), boost::asio::ignore_error());
    }
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}

CLIENT

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: client <host>" << std::endl;
      return 1;
    }
    
    boost::asio::io_service io_service;

    tcp::resolver resolver(io_service);
    tcp::resolver::query query(argv[1], "daytime");
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
    tcp::resolver::iterator end;

    tcp::socket socket(io_service);
    boost::asio::error error = boost::asio::error::host_not_found;
    while (error && endpoint_iterator != end)
    {
      socket.close();
      socket.connect(*endpoint_iterator++, boost::asio::assign_error(error));
    }
    if (error)
      throw error;

    for (;;)
    {
      boost::array<char, 128> buf;
      boost::asio::error error;

      size_t len = socket.read_some(
          boost::asio::buffer(buf), boost::asio::assign_error(error));

      if (error == boost::asio::error::eof)
        break; // Connection closed cleanly by peer.
      else if (error)
        throw error; // Some other error.

      std::cout.write(buf.data(), len);
    }
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}

The error with the server is likely that there are no permissions to run the file. Check and make sure that the file has the x bit set. For the client, you need to specify the name of the server to connect to.

I changed the permission for server with
chmod 777 daytime
but
./a daytime
still returns
Host not found (authoritative).
What would be the right syntax to add the <host>?
Thanks!

actually, when I run from root
./daytime
the process starts running and
ps -A
returns
7268 pts/1 00:00:00 daytime

well, I am still confused on what's exactly is going on... and what I should do to use that server from my client

Learn raw sockets first Beej's Guide to Network Programming

That's a pretty good tutorial.Thank you. Light has not yet come on my specific problem but I agree that there is no shortcut here.

May be this is late, but just in case someone else gets into the same problem in the future:

this most most likely because your account does not have permissions to execute some of the run-time shared libraries needed for this application or may be you do not have permissions to run them from the within the folder in which they reside.

To find out what libraries you need to run the app:

$ ldd <your app>

And then copy all the shared libraries into your apps folder and change their permission so you can execute them.

then make sure, when compiling and linking the app, that you include the app's folder as one of the run-time libraries search folders.

Wrong. As indicated in this thread, he had no problems running the server as root. This was because it tried to bind itself to a port <1024, which only root is allowed to do.

The problem is not with permissions or libraries (aside from the fact that you need to be root to run the server). the client program expects a host on the command line. so what you need to do is:

a. run the server (./daytime)
b. run the client by typing ./a localhost

this should work, but I make no promises or warranties.