Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933

Создание сервера с использованием WinSock

08.05.2017, 19:23. Показов 3313. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил почитать про сокеты. Перепечатал код с книги Снейдер Йон.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//Сервер
#include<WinSock2.h>
#include<iostream>
#include<windows.h>
 
int main()
{
    struct sockaddr_in local;
    int s;
    int s1;
    int rc;
    char buf[1];
    local.sin_family = AF_INET;
    local.sin_port = htons(7500);
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET, SOCK_STREAM, 0);
    if (s < 0)
    {
        std::cerr << "Error socket";
        system("pause");
        exit(1);
    }
    rc = bind(s, (struct sockaddr *)&local, sizeof(local));
    if (rc < 0)
    {
        std::cerr << "Error bind";
        system("pause");
        exit(1);
    }
    rc = listen(s, 5);
    if (rc)
    {
        std::cerr << "Error listen";
        system("pause");
        exit(1);
    }
    s1 = accept(s, NULL, NULL);
    if (s1 < 0)
    {
        std::cerr << "Error accept";
        system("pause");
        exit(1);
    }
    rc = recv(s1, buf, 1, 0);
    if (rc <= 0)
    {
        std::cerr << "Error recv";
        system("pause");
        exit(1);
    }
    std::cout << buf[0];
    rc = send(s1, "2", 1, 0);
    if (rc <= 0)
        std::cerr << "Error send";
    system("pause");
    exit(0);
}
И получил вот такие ошибки:

Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__accept@12 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__bind@12 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__htonl@4 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__htons@4 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__listen@8 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__recv@16 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__send@16 в функции _main Socket2
Ошибка LNK2019 ссылка на неразрешенный внешний символ __imp__socket@12 в функции _main Socket2

Может надо еще какую бибилиотеку подключить или что то в настройках VS сделать ? (если второе то что?)

Добавлено через 24 минуты
Добавил
C++
1
2
3
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
и стало норм. Теперь вопрос в том как это запустить через коммандную строку, предварительно откомпилировав в среде VS ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2017, 19:23
Ответы с готовыми решениями:

Создание конструктора тестов и их прохождение с использованием клиент-сервера
Всем привет! На этапе проектирования программки пришел к следующему затруднению... Хочу написать конструктор для создания тестов, в...

Ответ от сервера и winsock
Для отправки GET запроса использую процедуру: procedure HTTPGet(const URL:AnsiString; Query:String); ...

Winsock - Выключение сервера
Всем привет. Подскажите пожалуйста, как сообщить клиентам подключенным к серверу, что сервер прекратил работу ... например сервер...

24
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
14.05.2017, 12:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от uhx Посмотреть сообщение
О_о
Вы хоть поняли чего написали?
HTTP - протокол прикладного уровня, при чем тут вообще сокеты?
А как Вы собираетесь без сокетов что-либо передавать?
Сокет - это некий интерфейс, который позволяет передавать данные в сеть. Не представляю как вы без него собираетесь передавать что-то.
Прекрасно понимаю, что пишу. Не мало работал с сетью. Я говорил о том, что для "получил - закрыл" есть протокол более высокого уровня - http, который и нужно использовать, чтобы не писать велосипед на сырых сокетах.

Цитата Сообщение от SEGNET Посмотреть сообщение
Чем это отличается от моего кода?
Тем, что можно отправлять новые данные с клиента, а не подключаться каждый раз. Все зависит от задачи, конечно, но согласитесь - хранить соединение все таки правильнее.

Цитата Сообщение от SEGNET Посмотреть сообщение
Http тоже может держать соединение там в заголовках вроде указывается, хотя могу ошибаться.
Да, есть long polling соединение, но используется оно для других целей - ждать данные, которых пока не существует.
0
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
14.05.2017, 12:46
Цитата Сообщение от PavelPol Посмотреть сообщение
Тем, что можно отправлять новые данные с клиента, а не подключаться каждый раз.
Если совсем правильно, то нужно для каждого клиента открывать отдельный поток и там его обслуживать.
Если запихать в массив тогда как их сопоставлять при запросе?
0
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
14.05.2017, 12:53
Цитата Сообщение от SEGNET Посмотреть сообщение
Если совсем правильно, то нужно для каждого клиента открывать отдельный поток и там его обслуживать.
Без сомнений. Ну может, не поток на клиента (это невозможно, количество потоков ограничено), а поток на n клиентов с неблокирующей работой с сокетами.

Цитата Сообщение от SEGNET Посмотреть сообщение
Если запихать в массив тогда как их сопоставлять при запросе?
В данной задаче это не требуется ведь. Отсеял сокеты с данными, для каждого получил данные - вывел на консоль. А в общем случае хранить в массиве дополнительную служебную информацию о клиенте.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
14.05.2017, 15:43
Цитата Сообщение от PavelPol Посмотреть сообщение
протокол более высокого уровня - http, который и нужно использовать, чтобы не писать велосипед
При постановке задачи, как у ТС, http как раз будет лишней сущностью. udp-сокет - вполне адекватное решение. tcp-сокет ощутимо накладнее, но для данной задачи может оказаться лучшим решением, если данные не вмещаются в одну udp датаграмму.
Что какается tcp соединения, то его, очевидно, имеет смысл держать открытым, только если предполагается дальнейшее взаимодействие.
Решение, которое вы раскритиковали, мне представляется вполне адекватным поставленной задаче.
Цитата Сообщение от PavelPol Посмотреть сообщение
на сырых сокетах.
А это к чему? Насколько я понял, raw-сокеты в данной теме никто и не предлагал.
0
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
14.05.2017, 16:42
Цитата Сообщение от gng Посмотреть сообщение
А это к чему? Насколько я понял, raw-сокеты в данной теме никто и не предлагал.
Да, исправлюсь - на "чистых" сокетах. Это было не к задаче, а к тому, почему я против модели "получил, отправил, закрыл"
Цитата Сообщение от gng Посмотреть сообщение
Что какается tcp соединения, то его, очевидно, имеет смысл держать открытым, только если предполагается дальнейшее взаимодействие.
Мой опыт показывает, что в подобных задачах следующим шагом будет вариант с отправкой клиентом N пакетов. В результате придется переписывать, иначе будет плохой код.
Я предпочитаю всегда планировать возможность расширения функционала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2017, 16:42

C++ winsock переподключение сервера к клиенту
Здравствуйте, имеется клиент-серверное приложение на винсокс. Сервер сам подключается к клиенту. Нужно организовать возможность...

Релазиция TFTP клиета/сервера Winsock
Подскажите в какую сторону копать. Бо немогу понять как реализировать.

Как получить ответ с сервера Winsock'ом?
У меня есть код отправляющий данные серверу, приходят ответные данные и записываются в переменную. Но ответ получается информация с...

Winsock завернуть в COM. Как получить данные от сервера?
Нужно создать COM объект, который будет на определенный IP и порт слать данные.(клиент ) Я использую готовый WinSock.OCX. Если...

Многопоточный ТСР-сервер с использованием WinSock
При написании сервера столкнулся с некоторыми трудностями. Задача: написать ТСР-сервер, который мог бы обслуживать несколько клиентов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru