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

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

08.05.2017, 19:23. Показов 3207. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru