Ejemplo n.º 1
0
void main() {
    try {
        SocketSystem su;
        std::string host = su.getHostName(), ip = su.getIpFromName(host), name = su.getNameFromIp(ip);
        SocketListener listener(2048);
        Socket sendr;
        if (!sendr.connect(name, 2048)) // can use ip addr, e.g., 127.0.0.1
            return;
        Socket recvr = listener.waitForConnect();
        // sending
        const char* msg1 = "this is a message";
        sendr.send(msg1, strlen(msg1) + 1);
        const char* msg2 = "and a final message";
        sendr.send(msg2, strlen(msg2) + 1);
        sendr.send("quit", strlen("quit") + 1);
        const int BufLen = 256;
        char buffer[BufLen];
        recvr.recv(buffer, strlen(msg1) + 1);
        recvr.recv(buffer, strlen(msg2) + 1);

        recvr.recv(buffer, strlen("quit") + 1);
        recvr.disconnect();
        sendr.disconnect();
        if (!sendr.connect(name, 2048)) {
            throw std::exception("\n  sender reconnect failed");
        }
        recvr = listener.waitForConnect();
        msg1 = "another message after reconnecting";
        std::cout << "\n  sender sending: " << msg1;
        sendr.send(msg1, strlen(msg1) + 1);
        recvr.recv(buffer, strlen(msg1) + 1);
        msg1 = "sending message back";
        recvr.send(msg1, strlen(msg1) + 1);
        recvr.send("quit", strlen("quit") + 1);
        // receiving
        sendr.recv(buffer, strlen(msg1) + 1);
        sendr.recv(buffer, strlen("quit") + 1);
        sendr.disconnect();
        recvr.disconnect();
    } catch (std::exception& e) {
        std::cout << "\n  " << e.what() << "\n\n";
    }
}
Ejemplo n.º 2
0
void main()
{
  /*
   * Note: 
   * - No threads are used in this test stub, so it doesn't represent typical usage.
   * - Neither do we do any message framing.  So correct operation depends on lightly
   *   loaded receiver.
   * - We will provide a simple demo using threads and queues with message framing
   *   to show how that is done in another demo.  
   */
  std::cout << "\n  Testing Socket, SocketListener, and SocketSystem classes";
  std::cout << "\n ==========================================================\n";
  try
  {
    SocketSystem su;
    std::string host = su.getHostName();
    std::cout << "\n  host machine name:           " << host.c_str();
    std::string ip = su.getIpFromName(host);
    std::cout << "\n  IP Address of machine:       " << ip.c_str();
    std::string name = su.getNameFromIp(ip);
    std::cout << "\n  DNS name of machine from ip: " << name.c_str() << '\n';
  
    std::cout << "\n  Client connecting to Server";
    std::cout << "\n -----------------------------";
    SocketListener listener(2048);
    Socket sendr;
    if(!sendr.connect("127.0.0.1",2048))  // this works too
    //if(!sendr.connect("Apocalypse",2048))  // can use ip addr, e.g., 127.0.0.1
    {
      std::cout << "\n connection failed\n\n";
      return;
    }
    Socket recvr = listener.waitForConnect();
    std::cout << "\n  remote ip is: " << recvr.System().getRemoteIP(&recvr);
    std::cout << ", remote port is: " << recvr.System().getRemotePort(&recvr);
    std::cout << "\n  local ip is:  " << recvr.System().getLocalIP();
    std::cout << ", local port is: " << recvr.System().getLocalPort(&recvr) << '\n';

    std::cout << "\n  sending from Client to Server";
    std::cout << "\n -------------------------------";

    // sending
    const char* msg1 = "this is a message";
    sendr.sendAll(msg1,strlen(msg1)+1);

    const char* msg2 = "and a final message";
    sendr.sendAll(msg2,strlen(msg2)+1);

    sendr.sendAll("quit",strlen("quit")+1);

    // receiving
    std::cout.flush();
    const int BufLen = 256;
    char buffer[BufLen];

    std::cout << "\n  " << recvr.bytesLeft() << " bytes ready for reading";
    recvr.recvAll(buffer,strlen(msg1)+1);
    std::cout << "\n  Server received: " << buffer;
    std::cout << "\n  " << recvr.bytesLeft() << " bytes ready for reading";

    recvr.recvAll(buffer,strlen(msg2)+1);
    std::cout << "\n  Server received: " << buffer;
    std::cout << "\n  " << recvr.bytesLeft() << " bytes ready for reading";

    recvr.recvAll(buffer,strlen("quit")+1);
    std::cout << "\n  Server received: " << buffer;
    std::cout << "\n  " << recvr.bytesLeft() << " bytes ready for reading";
    std::cout << "\n";

    std::cout << "\n  Breaking connection";
    recvr.disconnect();
    sendr.disconnect();

    // new connection

    std::cout << "\n  Establishing new connection\n";
    if(!sendr.connect("127.0.0.1",2048))
    {
      throw std::exception("\n  reconnect failed");
    }
    recvr = listener.waitForConnect();
    msg1 = "another message after reconnecting";
    std::cout << "\n  Client sending: " << msg1;
    sendr.WriteLine(msg1);
    std::string temp = recvr.ReadLine();
    std::cout << "\n  Server received: " << temp;
    std::cout << "\n";

    // demonstrating full duplex operation
    std::cout << "\n  sending from Server back to Client";
    std::cout << "\n ------------------------------------";

    // sending
    msg1 = "sending message back";
    std::cout << "\n  Server sending message: " << msg1;
    recvr.WriteLine(msg1);
    std::cout << "\n  Server sending message: " << "quit";
    recvr.WriteLine("quit");

    // receiving
    std::cout << "\n  Client received: " << sendr.ReadLine();
    std::cout << "\n  Client received: " << sendr.ReadLine();
    std::cout << "\n  Client received: " << sendr.ReadLine();
    std::cout << std::endl;

    // copy construction
    Socket sendrCopy = sendr;
    Socket recvrCopy = recvr;

    // copy construction
    std::cout << "\n  sending and recieving with socket copies";
    std::cout << "\n ------------------------------------------";

    sendrCopy.WriteLine("string from sendrCopy");
    // recieving with copy
    std::cout << "\n  recvrCopy received: " << recvrCopy.ReadLine();
    std::cout << std::endl;

    // socket assignment
    sendr = sendrCopy;
    recvr = recvrCopy;

    // sending from assigned socket
    std::cout << "\n  sending and recieving with assigned sockets";
    std::cout << "\n ---------------------------------------------";

    sendr.WriteLine("string from AssignedSendr");
    // recieving with copy
    std::cout << "\n  AssignedRecvr received: " << recvr.ReadLine();
    std::cout << std::endl;

    sendr.disconnect();
    recvr.disconnect();
  }
  catch(std::exception& e)
  {
    std::cout << "\n  " << e.what() << "\n\n";
  }
  std::cout << "\n\n";
}
Ejemplo n.º 3
0
void main()
{
  std::cout << "\n  Testing Socket, SocketListener, and SocketSystem classes";
  std::cout << "\n ==========================================================\n";
  try
  {
    SocketSystem su;
    std::string host = su.getHostName();
    std::cout << "\n  host machine name:           " << host.c_str();
    std::string ip = su.getIpFromName(host);
    std::cout << "\n  IP Address of machine:       " << ip.c_str();
    std::string name = su.getNameFromIp(ip);
    std::cout << "\n  DNS name of machine from ip: " << name.c_str() << '\n';
  
    std::cout << "\n  connecting to listener";
    std::cout << "\n ------------------------";
    SocketListener listener(2048);
    Socket sendr;
    if(!sendr.connect(name,2048))  // can use ip addr, e.g., 127.0.0.1
    {
      std::cout << "\n connection failed\n\n";
      return;
    }
    Socket recvr = listener.waitForConnect();
    std::cout << "\n  remote ip is: " << recvr.getRemoteIP();
    std::cout << ", remote port is: " << recvr.getRemotePort();
    std::cout << "\n  local ip is:  " << recvr.getLocalIP();
    std::cout << ", local port is: " << recvr.getLocalPort() << '\n';

    std::cout << "\n  sending from connector to listener";
    std::cout << "\n ------------------------------------";

    // sending
    const char* msg1 = "this is a message";
    sendr.send(msg1,strlen(msg1)+1);

    const char* msg2 = "and a final message";
    sendr.send(msg2,strlen(msg2)+1);

    sendr.send("quit",strlen("quit")+1);

    // receiving
    std::cout.flush();
    const int BufLen = 256;
    char buffer[BufLen];
    recvr.recv(buffer,strlen(msg1)+1);
    std::cout << "\n  listener received: " << buffer;

    recvr.recv(buffer,strlen(msg2)+1);
    std::cout << "\n  listener received: " << buffer;

    recvr.recv(buffer,strlen("quit")+1);
    std::cout << "\n  listener received: " << buffer;
    std::cout << "\n";
//
    // demonstrating full duplex operation
    std::cout << "\n  sending from listener back to connector";
    std::cout << "\n -----------------------------------------";

    // sending
    msg1 = "sending message back";
    recvr.send(msg1,strlen(msg1)+1);
    recvr.send("quit",strlen("quit")+1);

    // receiving
    sendr.recv(buffer,strlen(msg1)+1);
    std::cout << "\n  connector received: " << buffer;
    sendr.recv(buffer,strlen("quit")+1);
    std::cout << "\n  connecter received: " << buffer;
    sendr.disconnect();
    recvr.disconnect();
    std::cout << "\n\n";
  }
  catch(std::exception& e)
  {
    std::cout << "\n  " << e.what() << "\n\n";
  }
}