Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++ кодерам.  (Прочитано 2123 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
C++ кодерам.
« : 03 Декабря 2009, 13:22:12 »
Помогите улучшить данные исходники http://gazette.linux.ru.net/lg74/articles/rus-tougher.html.

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

std::cout << "Дата: ";
   std::cin >> Numeral;
   client_socket << Numeral; в этой строке происходит ошибка.
   client_socket >> reply;


в h файле const ClientSocket& operator << ( const std::string& ) const;

Пользователь решил продолжить мысль 03 Декабря 2009, 16:20:37:
Родилась идея создать серверный калькулятор
http://www.linuxcenter.ru/lib/books/linuxdev/linuxdev4.phtml

С++ изучаю второй день, а работу надо сдать на след недели.
Жду ваших рекомендаций.
« Последнее редактирование: 03 Декабря 2009, 16:20:37 от nadir »

Оффлайн coyote

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #1 : 03 Декабря 2009, 16:43:03 »
полное сообщение об ошибке приведите

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: C++ кодерам.
« Ответ #2 : 03 Декабря 2009, 16:57:43 »
При изменении в simple_client_main.cpp
на
char Numeral;
std::cout << "Число: ";
std::cin >> Numeral;
client_socket << Numeral;
client_socket >> reply;
При компилировании происходит след ошибка:

simple_client_main.cpp: In function ‘int main()’:
simple_client_main.cpp:19: ошибка: некорректное преобразование из ‘char’ в ‘const char*’
simple_client_main.cpp:19: ошибка:   при инициализации 1 -го аргумента ‘std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]’
make: *** [simple_client_main.o] Ошибка 1




Оффлайн coyote

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #3 : 03 Декабря 2009, 17:03:51 »
функция ждет строку (char*), а вы ей char передаете

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #4 : 03 Декабря 2009, 17:09:13 »
попробуй изменить на
char Numeral[1024];
Извините, я все еще учусь

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: C++ кодерам.
« Ответ #5 : 03 Декабря 2009, 17:24:40 »
попробуй изменить на
char Numeral[1024];
помогло
#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
char Numeral[1024];
int main ( int argc, char**argv)
{
  try
    {

      ClientSocket client_socket ( "localhost", 30000 );

      std::string reply;

      try
{

std::cout << "Число: ";
std::cin >> Numeral;
client_socket << Numeral;

  //client_socket << "Test message.";
  client_socket >> reply;
}
      catch ( SocketException& ) {}

      std::cout << "We received this response from the server:
"" << reply << ""
";;

    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "
";
    }

  return 0;
}


Пользователь решил продолжить мысль 03 Декабря 2009, 15:26:41:
теперь остается внедрить код калькулятора на сервер
было бы вообще замечательно


Пользователь решил продолжить мысль 03 Декабря 2009, 20:42:54:
Хочу сделать, чтобы отправляя ариф выражение получал ответ.
Наприме 4+3. Сервер дает ответ 7.

Передача через перем Numeral. (char).

Серверная часть
while ( true )
      {
        std::string data;
        new_sock >> data; (Данные от клиента)
        new_sock << data; (Эхо)
      }
Как сделать чтобы производились вычисления.
« Последнее редактирование: 03 Декабря 2009, 20:42:54 от nadir »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #6 : 04 Декабря 2009, 09:12:36 »
Как сделать чтобы производились вычисления.

        new_sock >> data_in; (Данные от клиента)

// здесь вычисляется новая data_out на основании пришедшей data_in

        new_sock << data_out; (Эхо)

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: C++ кодерам.
« Ответ #7 : 04 Декабря 2009, 10:26:45 »
Как сделать чтобы производились вычисления.

        new_sock >> data_in; (Данные от клиента)

// здесь вычисляется новая data_out на основании пришедшей data_in

        new_sock << data_out; (Эхо)

simple_server_main.cpp:26: ошибка: нет декларации ‘data_in’ в этой области видимости
simple_server_main.cpp:27: ошибка: нет декларации ‘data_out’ в этой области видимости


Пользователь решил продолжить мысль 04 Декабря 2009, 08:33:36:
                 std::string data_in;
      std::string data_out;
        new_sock >> data_in;
      data_out=data_in; (вычисление)
        new_sock << data_out;
Но вычесления не происходит, получается эхо сервер.
Посылаешь 4+5, он то присылает 4+5.

Пользователь решил продолжить мысль 04 Декабря 2009, 11:02:54:
ServerSocket.h
Что означает это выражение
const ServerSocket& operator << ( const std::string& ) const;
  const ServerSocket& operator >> ( std::string& ) const;

Может в нем проблемы.
« Последнее редактирование: 04 Декабря 2009, 11:02:54 от nadir »

Оффлайн coyote

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #8 : 04 Декабря 2009, 14:13:34 »
> data_out=data_in;

ну какое это вычисление?! вы получаете от клиента data_in, присваиваете это в data_out и data_out снова возвращаете клиенту, естественно это эхо... Вам надо написать парсер строки, который будет разбирать data_in и на основе разбора вычислять data_out...

Оффлайн Daglonn

  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #9 : 04 Декабря 2009, 14:24:01 »
ты точно решил, что справишься ??

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: C++ кодерам.
« Ответ #10 : 04 Декабря 2009, 16:02:46 »
ты точно решил, что справишься ??
только с вашей помощью

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 702
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #11 : 04 Декабря 2009, 17:04:56 »
Если не смущает код на чистом C, то здесь уроки по началу программирования как раз на примере калькулятора:

http://www.linuxcenter.ru/lib/books/linuxdev/_index

P.S. Вспоминается мультик из серии Том и Джерри, где кот за 5 уроков выучился играть на пианино  ;D

Оффлайн absemetov

  • Автор темы
  • Активист
  • *
  • Сообщений: 401
  • LMDE 2011 01
    • Просмотр профиля
    • absemetov.org.ua
Re: C++ кодерам.
« Ответ #12 : 06 Декабря 2009, 16:25:59 »
Если не смущает код на чистом C, то здесь уроки по началу программирования как раз на примере калькулятора:

http://www.linuxcenter.ru/lib/books/linuxdev/_index

P.S. Вспоминается мультик из серии Том и Джерри, где кот за 5 уроков выучился играть на пианино  ;D

Этот пример я видел. Поэтому и зарадилась такая идея серверного калькулятора.

Если не использовать парсе, а отправлять данные по отдельности.
Как сделать чтобы сервер понимал какие данные ему отправляют?


Пользователь решил продолжить мысль 06 Декабря 2009, 14:39:23:
int a;
int b;               
std::string data_in;
std::string data_out;
new_sock >> data; //получаем данные от клиента
a=data;
if (!a==Null)//Если переменная а уже заполненна, то присвоить прем b второе значениеВот тут у меня возникают ошибки
{
b=data;
}
data_out=a+b
new_sock << data_out;

Пользователь решил продолжить мысль 06 Декабря 2009, 18:22:27:
Нужен также перевод строки в число.

Дайте дельный совет пожалуйста.
Уже устал эксперементировать(
« Последнее редактирование: 06 Декабря 2009, 18:22:27 от nadir »

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #13 : 06 Декабря 2009, 20:18:38 »
Странное условие, НЕ а равно нулю, видимо должно быть а НЕ равно нулю. Тогда а!=NULL

Оффлайн coyote

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: C++ кодерам.
« Ответ #14 : 06 Декабря 2009, 22:08:26 »
if(a!=NULL)

вообще лучше начинать с основ, а не с клиент-серверных приложений

 

Страница сгенерирована за 0.02 секунд. Запросов: 21.