![]() |
|
Модераторы: feodorv |
![]()
|
|
| Fantaz1 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
Начал разбираться с сокетами и в самом начале застрял на элементарном, с функциями send и recv, в програмке в которой сервер отправляет сообщения на клиент и там оно выводится на экран...
Вот коды двух программ. Сервер:
Клиент:
Кто подскажет в чем ошибка?? Почему не отправляются данные?? |
||||
|
|||||
| SenkraD |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 1 Всего: 23 |
и что вы этим отослать пытаетесь? 64 байта с адресса некого указателя?
|
||||
|
|||||
| Fantaz1 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
SenkraD исправил ваши замечания, но это не помогло:( Все равно зависает на recv()/send().. То есть сразу возвращает SOCKET_ERROR в этих методах.
Это сообщение отредактировал(а) Fantaz1 - 19.7.2010, 09:46 |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 1 Всего: 23 |
а что выдаёт GetLastError()?
|
|||
|
||||
| Fantaz1 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
в сервере ошибку №10057
в клиенте ошибку №10054 Это сообщение отредактировал(а) Fantaz1 - 19.7.2010, 10:30 |
|||
|
||||
| SenkraD |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 1 Всего: 23 |
10057:
10054:
так нашёл косяк в серваке:
нужно
Это сообщение отредактировал(а) SenkraD - 19.7.2010, 11:04 |
||||||||
|
|||||||||
| Fantaz1 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
SenkraD СПАСИБО ОГРОМНОЕ добрый человек!!!
|
|||
|
||||
| hoshin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
Начал изучать сокеты и так же остановился на самых элементарных вещах.
пример взятый с этой ссылки Секреты поваров компьютерной кухни или ПК: решение проблем, первый примитивный пример клиент-сервер с книги "Снейдер Й. - Эффективное программирование TCP-IP" весгда выдают одни и те же ошибки error LNK2019: unresolved external symbol __imp__recv@16 referenced in function _main error LNK2019: unresolved external symbol __imp__send@16 referenced in function _main error LNK2019: unresolved external symbol __imp__connect@12 referenced in function _main error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function _main error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _main C:\Debug\tcp book.exe : fatal error LNK1120: 6 unresolved externals Build log was saved at "file://c:\\Debug\BuildLog.htm" book - 7 error(s), 0 warning(s) и данный пример, который Вы только что разбирали выше так же выдал такие ошибки. Может кто подскажет, что делаю не так. Пишу на MSVS 2005. вот код, который например полностью выписан с книги Снейдера Й., выдает все эти семь ошибок. клиент
сервер
при игнорировании этих ошибок, выдает сообщение, что Unable to start program c:\book.exe "Не удается найти указаный файл" Подскажите пожалуйста, что делать... |
||||
|
|||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
это ошибки линковки, надо подключить библиотеку сокетов, посмотри в мсдн, как она называется
Добавлено @ 19:24 добавь в начало кода после инклюдов
Это сообщение отредактировал(а) null56 - 4.8.2010, 19:26 |
|||
|
||||
| hoshin |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
Спасибо тебе Добрый Человек!!!! только может знаете в книге автор написал в коде сервера -
и в консоли выводится сообщение "err listen : No error" посмотрел значение rc и SOCKET_ERROR - rc = 4294967295; SOKET_ERROR = -1; автор описал функцию listen() так: int listen(SOCKET s, int backlog); Возвращаемое значение: SOCKET_ERROR (для Windows) - ошибка. Подскажите кокое должно быть возвращаемое значение rc и SOCKET_ERROR - которое показывает, что ошибок нет. или была опечатка, которую надо исправить на if( !rc ) {...}; |
||||||
|
|||||||
| Modul |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
При возникновении ошибки listen() возвращает -1, SOCKET_ERROR = -1.
--------------------
I'll be back ! |
||||
|
|||||
| hoshin |
|
||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
тогда, из-за чего получается так, что выражение ( rc == -1 ), является истинным пример 1.
или как предлагал Modul, так же выражение (listen(sockfd, BACKLOG) == -1) является истинным пример 2.
, а когда пишу вот так пример 3.
выражение (rc < 0) не является истинным, т.е. тут rc > 0... когда решил проверить значение rc и получил такой ответ cout << "rc = " << rc; // rc = 4294967295; подскажите, из-за чего так получается, не пойму, ведь из первых двух вариантов listen() возвращал -1 (т.е. меньше нуля), что является признаком ошибки, а в третьем варианте возвращает не -1, что является признаком нормальной работы. P.S. после этого примера полностью запутался
выражение оператора if(rc < 0 || rc == -1) тут является истинным, тогда почему if(rc < 0) не является истинным (теретий пример)... |
||||||||||||||
|
|||||||||||||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 1 Всего: 23 |
hoshin, ну в последнем случае у вас if сработает если хотя бы одно условия сработает!!!
Какой тип имеет rc? не unsigned xxx часом? - если да, то тогда всё понятно: он никогда не может быть меньше нуля, а проверку равентсва проходит из-за того, что -1 автоматом кастуется к unsigned типу |
|||
|
||||
| Modul |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
В режиме слушания сервера (listen) эта функция возвращает 0, при возникновении ошибки =-1.
Вопросы отпали ??? Вот так правильно:
или
Это сообщение отредактировал(а) Modul - 5.8.2010, 15:14 --------------------
I'll be back ! |
||||
|
|||||
| hoshin |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 10.5.2010 Репутация: нет Всего: нет |
во всех примерах rc имеет тип SOCKET, хотя в книге был int, изменли int на SOCKET, из-за того, что
мой компилятор ругался c:\serv.cpp(22) : warning C4244: '=' : conversion from 'SOCKET' to 'int', possible loss of data но когда изменил int s на SOCKET s, перестал ругаться... или когда делая так
так же переставал ругаться как надо правильно, так? пример 1.
или так? пример 2.
есть ли между этими двумя примерами существенная разница? |
||||||||||
|
|||||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |