58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933

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

08.05.2017, 19:23. Показов 3229. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru