![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 13.12.2012
Сообщений: 2
|
![]()
Здравствуйте уважаемые форумчане. Не могли бы Вы помочь исправить ошибку. Суть такова. Нужно серверу отправить строку символов. Сервер должен найти там цифры и если они там есть отправить эти цифры обратно клиенту.
клиент работает нормально а вот сервер отсылает только последнюю цифру. В принципе он только её и оставляет в переменной. Там где вывод в консоль сервера всё происходит нормально т.е. выведены только цифры. вот кусок кода: while (recvfrom(s,b,sizeof(b),0, (sockaddr *) &local, &size)!=0) { for (int i = 0; i < strlen(b); i++) { if('0' <= b[i] && b[i] <= '9') { printf("%c",b[i]); //вывожу в консоль сервера Buf[i]=b[i]; //sprintf(Buf, "%c", b[i]); } } // Посылает данные на соединенный сокет sendto(s,Buf,sizeof(Buf),0, (struct sockaddr*)&local, size); } Спасибо |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Вопрос: на какой позиции в Buf запишется число, если входные данные у нас ABC1?
Второй вопрос - на какой позиции в Buf *должно* быть число в этом случае? Последний вопрос - сколько байтов ответа надо отправить в этом случае? Бонус вопросы: Что возвращает recvfrom и что будет с этим кодом в случае ошибки? Зачем нам strlen() если мы знаем ответ на первый бонусный вопрос? |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 13.12.2012
Сообщений: 2
|
![]()
На какой позиции запишется в первом вопросе. скорее всего число запишется в 3. А нужно что бы оно записалось в 0 позицию. на третий вопрос не уверен но наверное 1 байт.
recvfrom() возвращает число полученых байт. или -1 если ошибка. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Ну а теперь посмотрите у вас на какой позиции записывается и сколько байт посылаются.
Далее, бонусный вопрос 3 - почему в таких случаях *нельзя* использовать strlen? Подсказка: что именно делает strlen и *как* это делается. |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 20.03.2009
Сообщений: 2
|
![]()
записывает в третью позицию.
strlen возвращает в байтах длину строки без символа окончания. наверное как я понял нужно использовать sizeof в данном случае... но всё равно он в переменную Buf записывает в данном случае в 3 позицию. а если я делаю так: sprintf(Buf, "%c", b[i]); но записывается всегда только в первую. к примеру введу a1b2 он найдёт 1 запишет. потом найдёт 2 и затерёт 1 и запишет на то же место 2... как с этим бороться? понимаю что не правильно что то сделал но а что... |
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 20.03.2009
Сообщений: 2
|
![]()
Я думаю что нужно что то делать с Buf[i]=b[i]; . Это не правильно мне кажется. Вот только я не знаю что именно...
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клиент-Серверное приложение и БД | Mihail.Glukhov | БД в Delphi | 17 | 25.04.2012 11:52 |
клиент-серверное приложение. | MasterSporta | Общие вопросы C/C++ | 2 | 04.12.2011 00:16 |
клиент-серверное приложение | roxy1807 | БД в Delphi | 0 | 19.04.2011 19:02 |
Клиент Серверное приложение | BARNEY | Общие вопросы Delphi | 2 | 28.10.2010 09:30 |
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? | Demol | Работа с сетью в Delphi | 1 | 21.04.2009 16:18 |