Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 04:55   #1
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
Печаль сервер-клиент, recv-send и проблема с передаваемыми символами.

Рву мозг уже третий час.
Передаю от сервера клиенту и от клиента серверу строки функциями recv и send.
Допустим, передаю клиенту строку [out_s="1"], на клиенте принимаю её в переменную in_s. Для проверки вывожу in_s на экран [cout<<in_s] - на экране консоли вижу эту злощастную единичку, не до, ни после этого символа пробелов нет. Но когда пишу
[if (in_s=="1") cout<<"Убейся об стену!";else cout<<"Программист идиот!"]
клиент на отказ не хочет верить что значение истинно и обзывает меня идиотом... >_<
Вобще, цель перекинуть от сервера клиенту строку типа пути "C:\\*.*" для дальнейшего использования её в других процедурах, но строка тоже выводится на экран правильно, однако процедуры работы со строкой такого типа отказываются её воспринимать и тоже обзывают меня идиотом.

Если же перекидывать строку "1", а потом на клиенте преобразовать её в int строчкой [int a=atoi(in_s);], то число получается кок раз единичка.

ВОПРОС: Что не так? В чём моя ошибка? Это подводный камень или скорее всего я где то натупил?(я не мог натупить... завтра перепроверю с чистыми мозгами)

*РЕШЕНИЕ НАЙДЕННО! НО ВОПРОС "ПОЧЕМУ ТАК?" ВСЁ ЕЩЁ ОСТАЛСЯ!*

Последний раз редактировалось Ksardas13; 27.03.2011 в 06:40. Причина: Безвыходность, апатия, злоба, негодование....
Ksardas13 вне форума Ответить с цитированием
Старый 27.03.2011, 05:03   #2
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 585
По умолчанию

прости за тупой ответ:
in_s - это инт?
)))
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 27.03.2011, 05:12   #3
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Ничего, прощаю.
in_s это массив char, т.е. массив символов.
Ksardas13 вне форума Ответить с цитированием
Старый 27.03.2011, 05:18   #4
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 585
По умолчанию

попробуй вместо "" поставить ' '
просто на сколько я знаю например '0' и "0" это разные вещи и они имеют разные числовые значения
ещё моно для улучшеного понимания писать '\0' (тоже что и '0')
Это ещё не конец и даже не начало конца, это возможно только конец начала.

Последний раз редактировалось pufystyj; 27.03.2011 в 05:34.
pufystyj вне форума Ответить с цитированием
Старый 27.03.2011, 06:00   #5
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Дело не в кавычках. Цель передать строку от сервера клиенту. Строка(а строки в Си, разрази меня господь, обособляются именно кавычками "" такого типа) передаётся. На экран выводится в том виде, в котором передали. Но программно другие функции отказываются понимать, что она именно такова, какой выглядит.

Нашёл функцию strcmp(), которая в Си сравнивает две строки. Фак, по её мнению переданная строка от клиента(допустим это была строка "12345 мама мыла раму") и строка объявленная уже непосредственно на сервере "12345 мама мыла раму" тоже одно и тоже, но функции продолжают в это не верить!
Если передаём путь к папке "С:\\*.*", то функции сервера продолжают противиться и не используют его. Но если на сервере прямо перед ними и после приёма строки in_s написать строчку in_s="С:\\*.*", то они спокойно работают с ней.
Я начинаю видеть розовых слоников... надеюсь кто нибудь мне тут таки поможет...
Ksardas13 вне форума Ответить с цитированием
Старый 27.03.2011, 06:08   #6
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 585
По умолчанию

Цитата:
Сообщение от Ksardas13 Посмотреть сообщение
Дело не в кавычках. Цель передать строку от сервера клиенту. Строка(а строки в Си, разрази меня господь, обособляются именно кавычками "" такого типа) передаётся. На экран выводится в том виде, в котором передали. Но программно другие функции отказываются понимать, что она именно такова, какой выглядит.

Нашёл функцию strcmp(), которая в Си сравнивает две строки. Фак, по её мнению переданная строка от клиента(допустим это была строка "12345 мама мыла раму") и строка объявленная уже непосредственно на сервере "12345 мама мыла раму" тоже одно и тоже, но функции продолжают в это не верить!
Если передаём путь к папке "С:\\*.*", то функции сервера продолжают противиться и не используют его. Но если на сервере прямо перед ними и после приёма строки in_s написать строчку in_s="С:\\*.*", то они спокойно работают с ней.
Я начинаю видеть розовых слоников... надеюсь кто нибудь мне тут таки поможет...
Цитата:
а строки в Си, разрази меня господь, обособляются именно кавычками "" такого типа
щас прийдут добрые дядиньки програмисы и все решат за нас )))
"a" - это вроди код символа, вот к чему я вёл. кароче ночью я не оч думаю, иногда утром смотрю, что я на програмил и нихира не починмаю. )
вариант перевести этот елемент масива в инт и посатреть как себя поведёт програма.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 27.03.2011, 06:43   #7
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Еее, поставленную задачу решил(!мне тут даже розовые слоники зааплодировали!) таким кодом:
Цитата:
...//приняли данные и записали их в строку input_message
char sss[1000]={0};
for (int i=0;i<(strlen(input_message));i++) sss[i]=input_message[i];
...//строка sss теперь нормально читается другими процедурами и функциями -_-
Но всё ещё теряюсь в догадках почему такая хрень происходит, так что буду рад разъяснению... Хотя догадываюсь... видеть что то не так было с концом строки.... С++ презабавнейшая вещь)))

Последний раз редактировалось Ksardas13; 27.03.2011 в 06:45.
Ksardas13 вне форума Ответить с цитированием
Старый 27.03.2011, 17:42   #8
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
С++ презабавнейшая вещь)))
В начале речь шла о С, разве нет?
Если все же программа в Плюсах, то не проще ли сделать все это при помощи string или вообще через буфер и потоки? Зачем использовать С-ные строки?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 27.03.2011, 18:04   #9
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Вместо = и == лучше использовать strcpy() и strcmp().
optimator вне форума Ответить с цитированием
Старый 27.03.2011, 20:49   #10
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Сори, просто я часто не уделяю внимание разнице между Си и Плюсами, частенько использую эти названия как синонимы.)) Но да, пишу в плюсах.

Не делаю через стринг принципиально, ибо в дальнейшем не факт, что буду перекидывать по этой же методике только символы. А процедуры основанные на массиве символов, делитанское быть может ИМХО, легче перестроить под массивы из чисел. Да и просто разобраться хочу с этим зловредным типом char.

Буфер и потоки для меня пока терра инкогнито, хотя вот именно в данный момент(ну, мгновением позже) буду разбираться с потоками в Си(до этого кодил в Делфях, так что в Си пока спотыкаюсь и только разбираюсь)). Буду рад если подкинете ссылок на аккуратные и правильные статьи(с обилием практических примеров) по этому аспекту.))

"Вместо = и == лучше использовать strcpy() и strcmp(). "
Угу, это понял(нагуглил) кок раз вчера, где то уже перед отключением. Учту на будующее.))
Ksardas13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
hook на сетевые функции (send, recv) 0lorin Win Api 3 08.10.2010 13:03
send/recv: размер сообщения cw_o Работа с сетью в Delphi 4 23.04.2010 19:00
MPI: send и recv cheparamba Общие вопросы C/C++ 0 09.03.2010 05:48
WinSock (send, recv) AidarBik Работа с сетью в Delphi 1 27.07.2008 15:22
проблема с клиент-сервер khaz Общие вопросы Delphi 9 14.12.2006 15:16