Возникли проблемы с клиент / серверным калькулятором C ++ - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в кодировании, и я должен сделать этот калькулятор клиента / сервера для экзамена для моего университетского курса.К сожалению, мой профессор ничего не объяснил нам, поэтому я должен сделать всю работу сам.

Я уже закодировал часть соединения программ, и она отлично работает, так что клиент может подключиться к серверу.

Проблема, с которой я сталкиваюсь, связана с функцией на сервере, которая должна получать целые числа от клиента.Проблема в том, что любое число, которое я посылаю с клиента, на сервер поступает только 0. Я знаю это, потому что я использую cout для отображения значения после функции.

Функция на стороне сервера:

void ricezione_interi(int intero, int csock){
int bytesRecv = recv(csock, &intero, sizeof(int), 0);
if (bytesRecv == -1)
{
    cout << "Connection issue." << endl;
    close(csock);
    exit(1);
}
if (bytesRecv == 0)
{
    cout << "Client disconnected." << endl;
    close(csock);
    exit(1); 
}

return; }

Код на стороне клиента:

int bytesSent = send(sock, &intero, sizeof(int), 0); 

    if (bytesSent == -1)
    {
        cerr << "There was a connection issue." << endl;
        break;
    }
    if (bytesSent == 0)
    {
        cout << "Disconnected." << endl; 
        break;
    } 

В чем проблема с этим кодом?Спасибо заранее за внимание.

С уважением.

1 Ответ

0 голосов
/ 19 декабря 2018

Проблема в том, что любой номер, который я посылаю клиенту, на сервер поступает только 0.

Без MCVE я могу только догадываться, в чем проблема.Итак, вот мое предположение ...

То, что делает функция вашего приемника, более или менее совпадает с

void foo(int x) {
    x = 24;
}

Когда вы вызываете ее

int main() {
    int y = 0;
    foo(y);
    std::cout << y;
}

, тогда выполучит 0 в качестве вывода.Причина в том, что x передается по значению.Если вы хотите, чтобы функция изменила свой аргумент, вы должны передать его по ссылке:

void foo(int& x) {   // note the &
     x = 24;
}
int main() {
    y = 0;
    foo(y);
    std::cout << y;
}

Это выведет 24.

PS: Обратите внимание, что этот ответ основан исключительно наугадывание.Я не знаю, как вы знаете, что значение всегда 0, и я должен был догадаться.Задавая вопросы о коде, важно включить минимальный полный и поддающийся проверке пример и ожидаемый результат вместе с фактическим результатом в вопросе.

...