![]() |
|
Модераторы: feodorv |
![]()
|
|
| zhenya1 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
У меня явно что-то не в порядке. А в часности: я не понимаю почему после выполнения bind() все ложится, что у меня там не так происходит?
сервер:
клиент:
Это сообщение отредактировал(а) Олег2005 - 27.2.2011, 12:04 |
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Во первых - что за ОС?
Во вторых - что значит после бинда все ложится? Бинд не выполняется? Где анализ кода ошибки? |
|||
|
||||
| zhenya1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Для простоты и понимания сдалал UNIX, хотя в конце-концов мне нужно в windows ( я думаю, сильно отличаться не будет ,или я не прав?).
После bind() переменная rc принимает -1 почему-то. |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
-1 - это у всех юниксовых функций почти - просто свидетельство об ошибке.
А вам нужен код ошибки.... Для этой функции в переменной errno определены следующие коды ошибок: EBADF – аргумент – недопустимый описатель файла; ENOTSOCK – дескриптор сокета – не сокет; EADDRNOTAVAIL – заданный адрес недоступен на этой машине; EADDRINUSE – существует другой сокет, использующий заданный адрес; EINVAL – сокет еще не был привязан к адресу или уже находится в подключенном состоянии; EACCESS – у процесса недостаточно прав для обращения по заданному адресу. Без этого кода нельзя выяснить истинную причину. Это - правило сетевого программирования - всегда исследовать код ошибки.... Насчет Windows Да, портировать под винду несложно....... |
|||
|
||||
| zhenya1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Впервые сталкиваюсь, но я так понял нужно это в тело bind() добавить:
Если это, то результат: 0 No error |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Не понял.
Такого кода ошибки просто нет. Возврат 0 - означает успешное завершение вызова функции. А вот если возврат -1, то то надо смотреть errno Например: if(errno == EINPROGRESS) /* EINPROGRESS означает, что функция все еще пытается установить соединение */ { действие } Это проверка для connect() так какой код возврата bind()? if ( rc <= 0 ) меньше нуля.....а не равно...... Вызов res=bind(sd, name, addrlen); при корректном выполнении возвращает код 0 (res = 0), в противном случае res = -1. Это сообщение отредактировал(а) Олег2005 - 27.2.2011, 21:02 |
|||
|
||||
| zhenya1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Да , у меня rc = -1.
Но я не понимаю как мне определить этот код. В Вашем примере вы уже знаете с чем сравнивать:if(errno == EINPROGRESS), а откуда Вы это узнали?? |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Если вы работаете под Юниксом - то это глобальная переменная процесса
Можете ее анализировать Под виндами - там другая фишка - WSAGetLastError() |
|||
|
||||
| zhenya1 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Я с этими ошибками и UNIX только свое и Ваше время трачу...
Я попробовал под WIN(кстати, те ли я библиотеки задействовал?) и без всего лишнего, но в результате получаю "левый" символ, а не цифру. Почему? серв:
клиент:
|
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
А где
WSADATA и WSAStartup()? WSACleanup()? |
|||
|
||||
| zhenya1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Большое спасибо, все заработало!
|
|||
|
||||
| zhenya1 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
У меня сервер должен получить слово и послать результат клиент(полиндром или нет). Но мне кроме рузультата проверки "левые" символы приходят...окуда они? Правильно ли у меня сделано, добавил цикл ( чтобы сервер мог работать с многими, но не одновременно) ?
серв:
клиент:
|
||||
|
|||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Принципиально идея верная - у вас получился последовательный сервер - должен обрабатывать всех клиентов последовательно.
|
|||
|
||||
| zhenya1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 20.9.2010 Репутация: нет Всего: нет |
Это хорошо, благодарен, но еще одна мелочь: откуда берутся лишние символы при отправке результата клиенту?
|
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
А поточнее?
Что значит лишние? Что шлем? Откуда и кому? Все надо конкретно...... По пунктам 1. 2 3 и тд |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |