|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
|||||||||||||||||||||||||||||||
Сокеты в VC++ 200813.01.2012, 14:49. Показов 5567. Ответов 14
Метки нет (Все метки)
Привет всем.
Я делаю клиент и сервер. Делаю по книге : Снейдер Й. - Эффективное программирование TCP-IP. Там есть типа заготовки на клиента и сервер. Вот я по заготовке и делаю... Возникли проблемы уже на начале, при том пишет что ошибки в подключаемых стандартных файлах : winsock2.h и ws2def.h. Вот такой код у меня:
Ошибка 5 error C2143: синтаксическая ошибка: отсутствие "}" перед "константа" c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384
Ошибка 8 error C2143: синтаксическая ошибка: отсутствие ";" перед "}" c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 437
Ошибка 9 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 437
Ошибка 64 error C2375: WSAStartup: переопределение; другая компоновка c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h 2145
Ну вобщем вот такие ошибки и их всего 69. Кстати, в VC++ в Проект/Свойства/Компоновщик/Общие/Дополнительные каталоги библиотек я поставил wsock32.lib , а также это я поставил wsock32.dll в Проект/Свойства/Компоновщик/Ввод/Добавить модуль в сборку (пробовал сюда ставить wsock32.lib вместо wsock32.dll , а также пробовал и то и другое ставить). Подскажите, пожалуйста, что может быть не так. Просто я полный ноль в этом деле, уже 2 дня морочусь и никак не могу понять что до чего. Может у кого-то есть примеры сервера и клиента для Виндовс, то буду признателен если пришлете, так на примере будет легче понять. Заранее благодарю за внимание.
0
|
|||||||||||||||||||||||||||||||
| 13.01.2012, 14:49 | |
|
Ответы с готовыми решениями:
14
Отличие VS 2008 от VS 2008 в SQL Server 2008
Нужна помошь в подключении SQL Server 2008 и Visual Studio 2008 |
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 13.01.2012, 15:02 | |
|
Как я понял, в файле windows.h уже подключается winsock2.h, если версия винды старше или равна XP.
А ты подключаешь его еще раз - в итоге возникают проблемы с переопределением. Попробуй заккоментировать строку #include "winsock2.h"
1
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
|||||||
| 13.01.2012, 15:14 [ТС] | |||||||
ну и не только этот инклюд, а и другие... так вот, если их закоментировать чтобы не было ошибок, то оно потом не понимает что за функции вызываются, что за переменные используются.
0
|
|||||||
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 13.01.2012, 15:25 | |
|
Скиньте полный код сервера, посмотрю в чем могут быть проблемы...
Думаю, про подключение библиотек не в одной книге не написано в нормальном виде. Тут просто нужно анализировать ошибки и искать причину. Например, если в тексте ошики встречается слово redefine или redifination, то это говорит о том, что какой-то файл (не защищенный от повторного включения) скорей всего подключается дважды ну или есть объявления с одинаковыми именами. Если компилятор не может найти какие-то файлы, то тут несколько вариантов: 1) файл находится в другом месте 2) файл из сторонней библиотеки и ее нужно поставить 3) исходники даны под другую платформу, например под Linux, а не под Windows 4) ... Вот такая арифметика
0
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
||||||
| 13.01.2012, 15:33 [ТС] | ||||||
|
Там закоментирован весь код в main , но если его раскоментировать, то возникают такие проблемы что оно не понимает откуда функции и откуда переменные (строки по которым идет описание указал на всякий случай):
Вот описания автора (Снейдера): Включаемые файлы и глобальные переменные 1-14 Включаем заголовочные файлы, содержащие объявления используе*мых стандартных функций. 25 Макрос INIT выполняет стандартную инициализацию, в частности, установку глобальной переменной program_name для функции error и вызов функции WSAStartup при работе на платформе Windows. Функция main 26-35 Предполагается, что при вызове сервера ему будут переданы адрес и номер порта или только номер порта. Если адрес не указан, то привязываем к сокету псевдоадрес INADDR_ANY, разрешающий прием соединений по любому сетевому интерфейсу. В настоящем приложении в командной строке могут, конечно, быть и другие аргументы, обрабатывать их надо именно в этом месте. 36 Функция set_address записывает в поля переменной local типа sockaddr_in указанные адрес и номер порта. Функция set_address показана в листинге 2.3. 37-45 Получаем сокет, устанавливаем в нем опцию SO_REUSEADDR (совет 23) и привязываем к нему хранящиеся в переменной local адрес и номер порта. 46-47 Вызываем listen, чтобы сообщить ядру о готовности принимать соединения от клиентов. 48-56Принимаем соединения и для каждого из них вызываем функцию server. Она может самостоятельно обслужить соединение или создать Для этого новый процесс. В любом случае после возврата из функции server соединение закрывается. Вот такие вот дела...
0
|
||||||
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 13.01.2012, 15:44 | |
|
Ну у тебя в коде полно ошибок, какие-то левые симолы, точки, числа...
Сейчас попробую почистить
0
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
||
| 13.01.2012, 15:48 [ТС] | ||
|
0
|
||
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 13.01.2012, 15:57 | |
|
Так, походу где-то раньше в книге создавались необходимые файлы. Попробуй поискать
0
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
||||||||
| 13.01.2012, 16:40 [ТС] | ||||||||
Я бы не спрашивал, а попробовал бы, но просто я никогда не делал заголовочные файлы и для меня это проблема. Если это действительно надо, то займусь. просто сроки крайне поджимают - завтра утром к преподу на консультацию и нужно что-то принести хоть. Да, как-то я прошлепал с этим файлом. Видимо от недосыпания уже начинаются приколы ... надо будет выспаться...
0
|
||||||||
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
||||||
| 13.01.2012, 17:05 | ||||||
Сообщение было отмечено как решение
Решение
Короче, если не хочешь возиться с доп. файлами, то вот все в одном: по крайней мере запускается,
но про корректность молчу (да, чтобы прога не падала - нужно задавать как минимум один параметр в командной строке)
Вот например тут: http://www.netlib.narod.ru/lib... h14_08.htm
4
|
||||||
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
|
| 13.01.2012, 20:17 [ТС] | |
|
Haster, спасибо большое ! Буду разбираться.
На счет примеров, то нашел несколько примеров и объяснений, но все равно трудно разобраться: http://citforum.ru/book/cook/winsock.shtml http://www.intuit.ru/department/network/pami/4/ http://www.helloworld.ru/texts... vc2/16.htm В последнем , например, не смог даж понять как вызывать WSAStartup. Сделал как там, а оно пишет ошибку. В интуит вобще написано так, как я пишу рефераты - побольше, главное чтобы в тему. Все равно их никто читать не будет. Хотел попробовать сделать по этим описаниям, но все таки смотрю придется примеры подходящие искать(кстати не так оно и сразу находится. еще раз спасибо за пример. как раз следудующая лаба заключается в том, чтобы создать подобное приложение как там). еще вычитал что неплохо объясняется в "Системное программирование в среде Windows" Джонсон М. Харт. Ну не знаю , буду смотреть.
0
|
|
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 14.01.2012, 00:49 | |
|
По первой ссылке (citforum) )вроде не плохой пример эхо TCP-сервера и клиента )
0
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
||||||||||||
| 16.01.2012, 02:11 [ТС] | ||||||||||||
|
Добавлено через 31 минуту Делал по вышеуказанному примеру, но там небольшие ошибки. Нашел в чем проблема(там в цикле while сервера нужно было со скобками разобраться) , но все равно кое-что непонятно ... оно то работает, но все равно непонятность спокойствия не дает. Вобщем вот такое(там в закоментированном буду указывать на моменты) :
А вот код клиента:
1.Оно считывает 1023 байта. 2.1024-й байт = 0; 3.Вывести должно символы которые я ввел и незаполненные области массива символов. А почему оно не выводит незаполненные? (printf("S=>C:%s",buf); ) . Ведь потому-что в конце введенного стоит ноль ... но как оно поставило его аккурат после того, как я все ввел? Это когда мы fgets'ом вводим оно автоматически ноль ставит? а вот когда принимает recv , то оно не принимает это ноль, потому нужно восполнять его. Я правильно понимаю? что-то не могу детального описания recv найти ... 4. Не должно показывать 14 ...
0
|
||||||||||||
|
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
|
|
| 16.01.2012, 16:25 | |
|
CJS, можешь выложить полные тексты?
Не понятно, у тебя в первом куске кода написано, что это клиент и во втором тоже ) Так где что? _)) По поводу fgets - то действительно, возвращается Си-строка, т.е. 0 в конце добавляется, а recv - как read, что прочитала, то и вернула. С 14 байтами так не скажешь, нужно смотреть весь код. Может у тебя по ошибке массив объявлен длиной 14 байт или еще что. В общем, код в студию )
0
|
|
|
49 / 49 / 8
Регистрация: 17.07.2011
Сообщений: 380
|
|||||||||||||||||
| 17.01.2012, 00:45 [ТС] | |||||||||||||||||
|
Сервер возвращает клиенту то, что клиент отослал серверу. Если идет любое слово, а после него через пробел буква "а" или "s" , то сервер читает файлы и содержимое возвращает клиенту(просто по заданию нужно сервер снабдить функциями, ну я одну добавил, чтобы хоть на троечку было, а то времени уже нету). Сервер:
Клиент :
Хм ... там в сервере нужно еще вот эту DWORD WINAPI SexToClient(LPVOID client_socket) функцию добавить - только что пересматривал и заметил что недокопировал код... вобщем вот полная версия:
1
|
|||||||||||||||||
| 17.01.2012, 00:45 | |
|
Помогаю со студенческими работами здесь
15
Visual Studio 2008+ MS SQL Server 2008 добавления записей OC Window Server 2008(64)+1CV81 Сервер(64)+SQL 2008 (EXPRESS)
В VB 2008 не подключается база данных из MS SQL 2008 БД в SQL SERVER 2008 и Visual Studio 2008 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|