コード例 #1
0
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));
    }
  }
}
コード例 #2
0
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;
}