void readMatrixFromClient (TcpServer& server, matrix& inMatrix) { inMatrix.clear(); int numberOfColumns, numberOfRows; sprintf (sendingBuffer, "Number of Rows:"); server.send (sendingBuffer); server.receive (receivingBuffer, textLength); numberOfRows = atoi (receivingBuffer); sprintf (sendingBuffer, "Number of Columns:"); server.send (sendingBuffer); server.receive (receivingBuffer, textLength); numberOfColumns = atoi (receivingBuffer); for (int i = 0; i < numberOfRows; i++) { inMatrix.push_back(row()); for (int j = 0; j < numberOfColumns; j++){ sprintf (sendingBuffer, "Element (%d, %d):", i+1, j+1); server.send (sendingBuffer); server.receive (receivingBuffer, textLength); inMatrix[i].push_back(atoi(receivingBuffer)); } } }
int main(int argc, char** argv) { receivingBuffer = sendingBuffer = new char[512]; matrix firstMatrix, secondMatrix; TcpServer server; if (!server.bind (atoi(argv[1]))){ return 0; } if (!server.listenAndAccept()){ return 0; } sendMenu(server); server.receive (receivingBuffer, textLength); int operationOption = atoi (receivingBuffer); if ((operationOption != 1) && (operationOption != 2) && (operationOption != 3) && (operationOption != 4)){ sprintf (sendingBuffer, "Invalid Option.\n"); server.send (sendingBuffer); return 0; } matrix result; if (operationOption != 4){ sprintf (sendingBuffer, "\nFirst Matrix:\n"); server.send (sendingBuffer); readMatrixFromClient (server, firstMatrix); sprintf (sendingBuffer, "\nFirst Matrix:\n"); server.send (sendingBuffer); printMatrixToBuffer (firstMatrix); server.send (sendingBuffer); sprintf (sendingBuffer, "\nSecond Matrix:\n"); server.send (sendingBuffer); readMatrixFromClient (server, secondMatrix); sprintf (sendingBuffer, "\nSecond Matrix:\n"); server.send (sendingBuffer); printMatrixToBuffer (secondMatrix); server.send (sendingBuffer); switch (operationOption){ case 1: if ((firstMatrix.size() != secondMatrix.size()) || (firstMatrix[0].size() != secondMatrix[0].size())){ sprintf (sendingBuffer, "Dimensions don't match. Operation canceled.\n"); server.send (sendingBuffer); return 0; } result = addition (firstMatrix, secondMatrix); break; case 2: if ((firstMatrix.size() != secondMatrix.size()) || (firstMatrix[0].size() != secondMatrix[0].size())){ sprintf (sendingBuffer, "Dimensions don't match. Operation canceled.\n"); server.send (sendingBuffer); return 0; } result = subtraction (firstMatrix, secondMatrix); break; case 3: if (firstMatrix[0].size() != secondMatrix.size()){ sprintf (sendingBuffer, "Dimensions don't match. Operation canceled.\n"); server.send (sendingBuffer); return 0; } result = multiplation (firstMatrix, secondMatrix); break; } } else { sprintf (sendingBuffer, "\nMatrix:\n"); server.send (sendingBuffer); readMatrixFromClient (server, firstMatrix); sprintf (sendingBuffer, "\nMatrix:\n"); server.send (sendingBuffer); printMatrixToBuffer (firstMatrix); server.send (sendingBuffer); result = transpose (firstMatrix); } sprintf (sendingBuffer, "\nResulting Matrix:\n"); server.send (sendingBuffer); printMatrixToBuffer (result); server.send (sendingBuffer); delete[] sendingBuffer; }