Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518

Socket в консоли под Win на g++

20.09.2014, 20:18. Показов 4996. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите новичку начать....

Хочу в консоли написать сервер. Передавать клиентам строки/буферы/файлы...

Нашел простейшие примеры, но на #include <sys/socket.h> вылетает исключение - файл не найден. На форумах встретил фразу что это работает только под линукс. Меняйте ОС или ставьте старую Винду. А я за g++ (MinGW) взялся ради "мультиплатформенности". Пишу из под Win под андроид.

Помогите с простейшим примером! Пожа-а-алуста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2014, 20:18
Ответы с готовыми решениями:

Запуск под Win 7 программы написанной под Win NT
Приветствую! Я не программист, поэтому пишу к вам. Есть программа с названием WinCC.exe и база данных к ней PROVA.GDB. Программа...

Проблемы с раздачей интернета по вай фай с ноутбука под win 7 на win 8
Помогите пожалуйста, создать подключение получилось, но на том ноуте, который принимает вай фай на значке сети стоит восклицательный знак в...

win api socket
Подскажите пожалуйста, как с помощью win api socket клиент отсылает сообщения серверу? Соединение прошло успешно и клиент получает...

12
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.09.2014, 21:15
Tester64, Работа с сокетами Беркли: Нужно, чтобы сервер выдавал степень числа
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
20.09.2014, 22:28  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Работа с сокетами Беркли: Нужно, чтобы сервер выдавал степень числа
Там сказано: "А под виндой нет сокетов Беркли"

Пока не смог скомпилить ни одного чистого примера. Либо куски (которые не получается связать), либо использут какие-то левые lib-файлы (не из чистой поставки), либо требуют подключение dll.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.09.2014, 22:47
Цитата Сообщение от Tester64 Посмотреть сообщение
Пока не смог скомпилить ни одного чистого примера. Либо куски (которые не получается связать), либо использут какие-то левые lib-файлы (не из чистой поставки), либо требуют подключение dll.
Там в теме есть пример, который написан специально для винды. Вот в этом сообщении. И он работает на mingw.

Добавлено через 3 минуты
Нужно подключать windows.h и библиотеку libws2_32
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
20.09.2014, 23:07  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
и библиотеку libws2_32
Это меня и смутило!
Нашел его в одном из архивов примеров (компилить еще не пробовал)
Насколько эта библиотека универсальна? Что это вообще такое?

Мне нужно сделать ПОЛНОСТЬЮ мультиплатформенный протокол между виндой и андроидом. В последствии возможно и Линуксом...
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.09.2014, 23:19
Цитата Сообщение от Tester64 Посмотреть сообщение
Насколько эта библиотека универсальна? Что это вообще такое?
Это виндовая реализация сокетов. Естественно есть только под виндой.
Т.е. конкретно в случае сокетов полной совместимости на уровне api нет, под виндой нужно будет одним путем идти (т.к. виндовая реализация не следует стандарту POSIX на 100%), под linux и android - другим и т.д. Вот небольшая статья, там в конце есть отличия реализации в win и linux. Обычно в таких случаях пишут обертки, приводится все к одному интерфейсу, скрывая детали реализации для конкретной ОС. В программе используют уже эту обертку и разработанный общий интерфейс.

Цитата Сообщение от Tester64 Посмотреть сообщение
Мне нужно сделать ПОЛНОСТЬЮ мультиплатформенный протокол между виндой и андроидом. В последствии возможно и Линуксом...
Можно и по другому пути пойти. Существуют библиотеки, в которых уже сделали большую работу по приведению разных особенностей ОС к единому знаменателю, например такие как Qt.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
20.09.2014, 23:27  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Обычно в таких случаях пишут обертки, приводится все к одному интерфейсу, скрывая детали реализации для конкретной ОС. В программе используют уже эту обертку и разработанный общий интерфейс.
Я так и собираюсь сделать - вывести только "управляющие" команды для пользователя. Но не хочу перейдя на вин8 оказаться у начала - библиотека libws2_32 вдруг перестанет работать и прийдется все с нуля переписывать под другую библиотеку. Или просто компилится не будет без искходников... Например под 64битную платформу... Мне нужна надежность - расчет на годы развития проекта...
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.09.2014, 23:30
Цитата Сообщение от Tester64 Посмотреть сообщение
Но не хочу перейдя на вин8 оказаться у начала - библиотека libws2_32 вдруг перестанет работать и прийдется все с нуля переписывать под другую библиотеку.
ws2_32 - это winsock. А winsock есть на любой windows.
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
21.09.2014, 15:08  [ТС]
Похоже рано взялся за тему... Для меня это еще слишком сложно...
ws2_32 нашел в поставке MinGW. Но не *.lib как в архиве, а *.a. Как подобное "подключать" к проекту в строке компиляции я еще не понял... Проще пока на яве написать... Будет время - разберусь, перепишу на с++...
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
21.09.2014, 15:17
Цитата Сообщение от Tester64 Посмотреть сообщение
Как подобное "подключать" к проекту в строке компиляции я еще не понял...
Если в командной строке, то так:
g++ <параметры> -lws2_32
Если в какой-либо IDE c mingw (напр. CodeBlocks), то в свойствах проекта в подключаемых библиотеках прописать ws2_32 (см. пример на скриншоте).
Миниатюры
Socket в консоли под Win на g++  
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
21.09.2014, 19:32  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
g++ <параметры> -lws2_32
g++: error: ws2_32: No such file or directory
Причем пробовал и указать прямой путь к ws2_32.lib (из одного из примеров) и без пути (наделялся что подхватит из компилятора). Пока без кода - просто подключал либу. Без -lws2_32 пустышка собирается.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
21.09.2014, 19:59
Лучший ответ Сообщение было отмечено Tester64 как решение

Решение

Цитата Сообщение от Tester64 Посмотреть сообщение
+: error: ws2_32: No such file or directory
Причем пробовал и указать прямой путь к ws2_32.lib (из одного из примеров) и без пути (наделялся что подхватит из компилятора). Пока без кода - просто подключал либу. Без -lws2_32 пустышка собирается.
Что-то не так делаешь. Вот пример на скриншоте, все работает. В нем предполагается, что программа с использованием сокетов, например такая
Кликните здесь для просмотра всего текста
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <cstdio>
#include <cstring>
#include <winsock2.h>
#include <windows.h>
 
#define PORT 666
#define SERVERADDR "127.0.0.1"
 
int main(int argc, char* argv[])
{
    printf("TCP DEMO CLIENT\n");
 
    WSADATA WsaData;
    // Шаг 1 - инициализация библиотеки Winsock
    if(WSAStartup(0x202, &WsaData))
    {
        printf("WSAStart error %d\n", WSAGetLastError());
        return -1;
    }
 
    // Шаг 2 - создание сокета
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if(my_sock < 0)
    {
        printf("Socket() error %d\n", WSAGetLastError());
        return -1;
    }
 
    // Шаг 3 - установка соединения
    // заполнение структуры sockaddr_in - указание адреса и порта сервера
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
 
    // преобразование IP адреса из символьного в сетевой формат
    if(inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        printf("Invalid address %s\n", SERVERADDR);
        closesocket(my_sock);
        WSACleanup();
        return -1;
    }
 
    // адрес сервера получен - пытаемся установить соединение
    if(connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
        printf("Connect error %d\n", WSAGetLastError());
 
        closesocket(my_sock);
        WSACleanup();
        return -1;
    }
 
    printf("Connected to port %d, type 0 for exit\n", PORT);
    int value;
    printf("Enter value: ");
    scanf("%d", &value);
 
    value = htonl(value);
    send(my_sock, (char*)&value, sizeof(value), 0);
 
    int result;
    recv(my_sock, (char*)&result, sizeof(result), 0);
    result = ntohl(result);
    printf("Computed value [%d]\n", result);
 
    closesocket(my_sock);
    WSACleanup();
    return 0;
}
лежит в корне диска D. Путь к папке bin компилятора, естественно, свой укажешь.
Полный путь к библиотеке указывать не нужно. Или, если вдруг захочешь все-таки это сделать, то надо так:
g++ <файл для сборки>.cpp -L<путь до библиотеки> -l<имя библиотеки без префикса lib и расширения> -o <имя исп. файла>.exe
Миниатюры
Socket в консоли под Win на g++  
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
21.09.2014, 21:19  [ТС]
УРА! Сработало! Спасибо! Даже что-то в делфи отправил...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.09.2014, 21:19
Помогаю со студенческими работами здесь

Как написать программу под Win XP на Win 8?
Какую версию с# качать? И, если можно, дайте ссылку Заранее спасибо!

Win 7 не видит компьютеры под Win XP
Всем привет) У меня следущая проблема: На работе имеется 10 компов под Win XP pro, соединены в сеть через свитч D-Link DSL 2500U, все...

Как заставить работать МФУ j5520 под Win 7? Родные драйвера только под XP
Как заставить работать МФУ j5520 под Win 7? Родные драйвера только под XP. На сайте HP драйвера под Win7 нет. Понимаю, что принтер...

Взаимодействие клиента под Win и сервера под Unix
Подскажите, пожалуйста... Есть приложение клиент-сервер. Клиент -программа под Windows. Сервер -под Unix(Sun Solaris). Как...

Можно ли под Windows поставить какой - то комплект Qt, чтоб параллельно компилить под Win и Linux?
Ну как бЭ вопрос в шапке :) Тоесть не имея на компе Linux, компилировать под виндой два выходных файла, под Windows и под Linux ?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
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 Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru