| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > TCP сервер-клиент |
| Автор: zhenya1 26.2.2011, 20:55 | ||||
| У меня явно что-то не в порядке. А в часности: я не понимаю почему после выполнения bind() все ложится, что у меня там не так происходит? сервер:
клиент:
|
| Автор: Олег2005 27.2.2011, 12:09 |
| Во первых - что за ОС? Во вторых - что значит после бинда все ложится? Бинд не выполняется? Где анализ кода ошибки? |
| Автор: zhenya1 27.2.2011, 14:58 |
| Для простоты и понимания сдалал UNIX, хотя в конце-концов мне нужно в windows ( я думаю, сильно отличаться не будет ,или я не прав?). После bind() переменная rc принимает -1 почему-то. |
| Автор: Олег2005 27.2.2011, 15:17 |
| -1 - это у всех юниксовых функций почти - просто свидетельство об ошибке. А вам нужен код ошибки.... Для этой функции в переменной errno определены следующие коды ошибок: EBADF – аргумент – недопустимый описатель файла; ENOTSOCK – дескриптор сокета – не сокет; EADDRNOTAVAIL – заданный адрес недоступен на этой машине; EADDRINUSE – существует другой сокет, использующий заданный адрес; EINVAL – сокет еще не был привязан к адресу или уже находится в подключенном состоянии; EACCESS – у процесса недостаточно прав для обращения по заданному адресу. Без этого кода нельзя выяснить истинную причину. Это - правило сетевого программирования - всегда исследовать код ошибки.... Насчет Windows Да, портировать под винду несложно....... |
| Автор: zhenya1 27.2.2011, 15:33 | ||
Впервые сталкиваюсь, но я так понял нужно это в тело bind() добавить:
Если это, то результат: 0 No error |
| Автор: Олег2005 27.2.2011, 20:55 |
| Не понял. Такого кода ошибки просто нет. Возврат 0 - означает успешное завершение вызова функции. А вот если возврат -1, то то надо смотреть errno Например: if(errno == EINPROGRESS) /* EINPROGRESS означает, что функция все еще пытается установить соединение */ { действие } Это проверка для connect() так какой код возврата bind()? if ( rc <= 0 ) меньше нуля.....а не равно...... Вызов res=bind(sd, name, addrlen); при корректном выполнении возвращает код 0 (res = 0), в противном случае res = -1. |
| Автор: zhenya1 27.2.2011, 22:28 |
| Да , у меня rc = -1. Но я не понимаю как мне определить этот код. В Вашем примере вы уже знаете с чем сравнивать:if(errno == EINPROGRESS), а откуда Вы это узнали?? |
| Автор: Олег2005 27.2.2011, 22:44 |
| Если вы работаете под Юниксом - то это глобальная переменная процесса Можете ее анализировать Под виндами - там другая фишка - WSAGetLastError() |
| Автор: zhenya1 27.2.2011, 23:11 | ||||
| Я с этими ошибками и UNIX только свое и Ваше время трачу... Я попробовал под WIN(кстати, те ли я библиотеки задействовал?) и без всего лишнего, но в результате получаю "левый" символ, а не цифру. Почему? серв:
клиент:
|
| Автор: Олег2005 1.3.2011, 15:44 |
| А где WSADATA и WSAStartup()? WSACleanup()? |
| Автор: zhenya1 1.3.2011, 21:56 |
| Большое спасибо, все заработало! |
| Автор: zhenya1 8.3.2011, 15:35 | ||||
| У меня сервер должен получить слово и послать результат клиент(полиндром или нет). Но мне кроме рузультата проверки "левые" символы приходят...окуда они? Правильно ли у меня сделано, добавил цикл ( чтобы сервер мог работать с многими, но не одновременно) ? серв:
клиент:
|
| Автор: Олег2005 8.3.2011, 17:45 |
| Принципиально идея верная - у вас получился последовательный сервер - должен обрабатывать всех клиентов последовательно. |
| Автор: zhenya1 8.3.2011, 18:31 |
| Это хорошо, благодарен, но еще одна мелочь: откуда берутся лишние символы при отправке результата клиенту? |
| Автор: Олег2005 9.3.2011, 19:43 |
| А поточнее? Что значит лишние? Что шлем? Откуда и кому? Все надо конкретно...... По пунктам 1. 2 3 и тд |
| Автор: zhenya1 10.3.2011, 02:17 |
| Извиняюсь, вот конкретно проблема: 1. Шлю серверу любое слов, например "zhenya" . 2. т.к. это слово не есть полиндром, сервер выдает ответ "it`s no" и добавляет "мусор" . 3. Добавил скрин результата работы (см. ниже) : |
| Автор: Олег2005 11.3.2011, 23:11 |
| думаю что это не проблема сервера - а несоответствие кодировок - А и W - при чтении.... |