#include #include #include #include #include #include #include #include #include #include void RcvMsg(int desc); int main (int argc, char** argv) { if (argc != 4) { cout << "zeroC \n"; cout << "\twhere socktype: \n\t\t1 -> SOCK_STREAM\n\t\t2 -> SOCK_CLUSTER\n"; return 1; } int socktype = atoi(argv[1]); if ((socktype <= 0) || (socktype > 2)) { cout << "Socktype must be 1 for SOCK_STREAM or 2 for SOCK_CLUSTER\n"; return 1; } int sockDeclVal = 0; switch(socktype) { case 1: sockDeclVal = SOCK_STREAM; break; case 2: sockDeclVal = SOCK_CLUSTER; break; } char* machineName = argv[2]; int port = atoi(argv[3]); struct hostent* host = gethostbyname(machineName); struct sockaddr_in sockStruct; sockStruct.sin_family = AF_INET; sockStruct.sin_port = port; sockStruct.sin_addr.s_addr = inet_addr(machineName); int desc = socket(PF_INET, sockDeclVal, 0); //0->ip if (desc == -1) { cout << "Error setting protocol\n"; return 1; } if ( connect(desc, (const sockaddr*)&sockStruct, sizeof(sockStruct)) == -1) { cout << "Failed to connect, " << strerror(errno) << "\n"; return 1; } //we have connected RcvMsg(desc); RcvMsg(desc); RcvMsg(desc); close(desc); return 0; }; void RcvMsg(int desc) { char msgLenStr[5]; if (recv(desc, (void*)msgLenStr, 2, MSG_WAITALL) != 2) { cout << "Did not recv the next message length\n"; exit(1); } msgLenStr[2] = 0; int len = atoi(msgLenStr); int rcvAmount = 0; char* newMsg = new char[len]; if (rcvAmount = recv(desc, (void*)newMsg, len, MSG_WAITALL) != len) { cout << "Wanted to recv " << len << " but only got " << rcvAmount; exit(1); } newMsg[len-1] = 0; cout << newMsg << "\n"; }