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"; } }
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"; }
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"; } }