|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.03.2011, 04:55 | #1 |
Форумчанин
Регистрация: 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. Причина: Безвыходность, апатия, злоба, негодование.... |
27.03.2011, 05:03 | #2 |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
прости за тупой ответ:
in_s - это инт? )))
Это ещё не конец и даже не начало конца, это возможно только конец начала.
|
27.03.2011, 05:12 | #3 |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
Ничего, прощаю.
in_s это массив char, т.е. массив символов. |
27.03.2011, 05:18 | #4 |
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
попробуй вместо "" поставить ' '
просто на сколько я знаю например '0' и "0" это разные вещи и они имеют разные числовые значения ещё моно для улучшеного понимания писать '\0' (тоже что и '0')
Это ещё не конец и даже не начало конца, это возможно только конец начала.
Последний раз редактировалось pufystyj; 27.03.2011 в 05:34. |
27.03.2011, 06:00 | #5 |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
Дело не в кавычках. Цель передать строку от сервера клиенту. Строка(а строки в Си, разрази меня господь, обособляются именно кавычками "" такого типа) передаётся. На экран выводится в том виде, в котором передали. Но программно другие функции отказываются понимать, что она именно такова, какой выглядит.
Нашёл функцию strcmp(), которая в Си сравнивает две строки. Фак, по её мнению переданная строка от клиента(допустим это была строка "12345 мама мыла раму") и строка объявленная уже непосредственно на сервере "12345 мама мыла раму" тоже одно и тоже, но функции продолжают в это не верить! Если передаём путь к папке "С:\\*.*", то функции сервера продолжают противиться и не используют его. Но если на сервере прямо перед ними и после приёма строки in_s написать строчку in_s="С:\\*.*", то они спокойно работают с ней. Я начинаю видеть розовых слоников... надеюсь кто нибудь мне тут таки поможет... |
27.03.2011, 06:08 | #6 | ||
Форумчанин
Регистрация: 10.11.2010
Сообщений: 569
|
Цитата:
Цитата:
"a" - это вроди код символа, вот к чему я вёл. кароче ночью я не оч думаю, иногда утром смотрю, что я на програмил и нихира не починмаю. ) вариант перевести этот елемент масива в инт и посатреть как себя поведёт програма.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
|
||
27.03.2011, 06:43 | #7 | |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
Еее, поставленную задачу решил(!мне тут даже розовые слоники зааплодировали!) таким кодом:
Цитата:
Последний раз редактировалось Ksardas13; 27.03.2011 в 06:45. |
|
27.03.2011, 17:42 | #8 | |
Software Developer
Участник клуба
Регистрация: 01.03.2011
Сообщений: 1,098
|
Цитата:
Если все же программа в Плюсах, то не проще ли сделать все это при помощи string или вообще через буфер и потоки? Зачем использовать С-ные строки?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв. Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062 |
|
27.03.2011, 18:04 | #9 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 92
|
Вместо = и == лучше использовать strcpy() и strcmp().
|
27.03.2011, 20:49 | #10 |
Форумчанин
Регистрация: 24.03.2011
Сообщений: 120
|
Сори, просто я часто не уделяю внимание разнице между Си и Плюсами, частенько использую эти названия как синонимы.)) Но да, пишу в плюсах.
Не делаю через стринг принципиально, ибо в дальнейшем не факт, что буду перекидывать по этой же методике только символы. А процедуры основанные на массиве символов, делитанское быть может ИМХО, легче перестроить под массивы из чисел. Да и просто разобраться хочу с этим зловредным типом char. Буфер и потоки для меня пока терра инкогнито, хотя вот именно в данный момент(ну, мгновением позже) буду разбираться с потоками в Си(до этого кодил в Делфях, так что в Си пока спотыкаюсь и только разбираюсь)). Буду рад если подкинете ссылок на аккуратные и правильные статьи(с обилием практических примеров) по этому аспекту.)) "Вместо = и == лучше использовать strcpy() и strcmp(). " Угу, это понял(нагуглил) кок раз вчера, где то уже перед отключением. Учту на будующее.)) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |