Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Клиент-серверное приложение |
Автор: Agentx86 6.6.2009, 02:03 | ||||
Нашел я вот такой исходник на firststeps
Запускаю. Сервер выдает ошибку. Проверяю отладчиком. Ошибка вот в этой строчке CSocketFile file(&RecieveSocket). С одной стороны это логично. Клиент еще не подключился, а я уже пытаюсь принимать данные. Но с другой стороны для меня странно, что прошел accept. Поидее программа должна была зависнуть в этой точке и ждать подключения клиента. Ладно. Выношу вот этот кусок в отдельный поток
Запускаю сервер. Запускаю клиент. Клиент не коннектится. IP адрес указал 127.0.0.1 порт 5555(клиент/сервер). Что я делаю неправильно? Если у когото есть пожожий исходник, поделитесь. |
Автор: Agentx86 6.6.2009, 20:27 |
Немогу понять в чем проблема. Пишу вот эти две строчки CSocket ServerSocket; ServerSocket.Create(5534) Метод Create возвращает false. Что здесь можно сделать неправильно мне не понятно. Пробывал это на разных портах. Добавлено через 4 минуты и 22 секунды Понял в чем проблема. При создании приложения надо поставить галочку что будут использоваться сокеты. |
Автор: Agentx86 8.6.2009, 00:52 | ||||
Не получается поместить accept в отдельный поток. после вызова функции listen, запускаю поток. вот код потоковой функции
поток создаю вот так
Причем я пробовал в потоковой функции обращаться к m_mainSocket как к глобальной переменной. Также пытался создать pSocket глобально. Ничто не помогает. После запуска потока на строке с Accept выскакивает ошибка Debug Assertion Failed в sockcore.cpp. |
Автор: Dreamer_0x01 9.6.2009, 13:29 | ||
AfxSocketInit() в каком месте запускали? Надеюсь, до конструирования сокетов и Create() ?
А в каком месте запускается сама потоковая функция? Очень похоже, что сокет, указатель на который передан в lpParam, до этого момента не был проинициализирован как надо. |
Автор: Agentx86 11.6.2009, 00:30 |
Большо спасибо, Dreamer_0x01 Помог решить проблему. Главная проблема была это то что я ServerSocket объявил глобально. Еще один вопросик есть. Как перевести сокет в синхронный режим(блокирующий)? |
Автор: Agentx86 19.6.2009, 13:59 | ||
Хочу сам подключать клиентов в отдельном потоке. Написал вот такой код.
Не работает, потомучто сокет работает в асинхронном режиме. Прочитал для того, чтобы передать сокет в поток нужно использовать Attach и Detach. Чтото у меня не получается это сделать. Пример из МСДНа не очень понял. Можете подправить этот код при помощи Attach и Detach, так чтобы функция Accept работал синхронно. Или объясните на пальцах как использовать эти методы. Заранее, большое спасибо. |