Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12

Сортировка массива сервером

28.04.2013, 14:04. Показов 1992. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать так, чтобы клиент отправлял массив, а сервер его отсортировал
код сервера
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
//------------------------------------------------------------------------------
#include <winsock>
#include <stdio.h>
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101) return -1;
 
    SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET) return -1;
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(argc != 3? 1024 : atoi(argv[2]));
    sa.sin_addr.S_un.S_addr = inet_addr(argc != 3? "127.0.0.1" : argv[1]);
 
    if (bind(s, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR) return -1;
 
    SOCKADDR_IN nsa;
    int sizeof_nsa = sizeof(nsa);
 
    char buffer[1024];
    int buffer_size = sizeof(buffer);
    if
    (
        recvfrom(s, buffer, buffer_size, 0, (SOCKADDR *)&nsa, &sizeof_nsa) ==
            SOCKET_ERROR
    )
        return -1;
    printf("message=%s\n", buffer);
 
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
код клиента
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
//------------------------------------------------------------------------------
#include <winsock>
#include <stdio.h>
#include <string>
#include <iostream>
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101) return -1;
 
    SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET) return -1;
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(argc != 3? 1024 : atoi(argv[2]));
    sa.sin_addr.S_un.S_addr = inet_addr(argc != 3? "127.0.0.1" : argv[1]);
 
    std::string message;
    printf("message=");
    getline(std::cin, message);
    if
    (
        sendto
        (
            s,
            message.c_str(), message.length() + 1,
            0,
            (SOCKADDR *)&sa, sizeof(sa)
        ) == SOCKET_ERROR
    )
        return -1;
 
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
попытался сделать сам, но поятоянная ошибка, помогите плиз
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2013, 14:04
Ответы с готовыми решениями:

Cеть с доменом, файл обменником, сервером 1С, атс, фаерволом, локальным сервером сайта
Народ помогите схематично хотябы разобраться как организовать ПАРАВЕЛЬНО сеть с доменом, файл обменником, сервером 1С, атс, фаерволом,...

Сортировка массива целых чисел A(n) по убыванию(используя метод обменная сортировка)
Помогите написать программу для сортировки массива целых чисел A(n) по убыванию(используя метод обменная сортировка). Или хотя бы без этого...

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

22
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
29.04.2013, 11:06
Цитата Сообщение от NasenYerlan Посмотреть сообщение
поятоянная ошибка
и где она? там же где сортировка? там же где массив? там же где тип массива? или его ввод?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
29.04.2013, 17:47
Начни с этого, а дальше видно будет.
C++
1
2
bool t= WSAStartup(0x101,&wsa_data);
if (t||wsa_data.wVersion!=0X101)
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
30.04.2013, 09:18
Цитата Сообщение от kravam Посмотреть сообщение
Начни с этого
и чем это отличается от того что написано у автора?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
30.04.2013, 10:07
А вы запустите и узнаете... Компилить в уме, оно круто, конечно, но...
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
30.04.2013, 10:36
Цитата Сообщение от kravam Посмотреть сообщение
но...
просто у самого в программах стоит
C++
1
2
3
4
5
6
7
8
9
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101)
    {
        printf("can not initialize sockets\n");
    }
    else
    {
        printf("sockets initialized\n");
    }
и все работает
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
01.05.2013, 15:01
Ну пусть работает, а делать так не надо. А вдруг компилятор сделает так, что сперва на истинность будет проверяться вот это выражение:
C++
1
wsa_data.wVersion != 0x101
А потом вот это:
C++
1
WSAStartup(0x101, &wsa_data)
Тогда, если до проверки условия в wsa_data.wVersion не находилось 0X101, (что скорее всего), тогда выражение
C++
1
(WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101)
будет истинным и программа закончится крахом.

Добавлено через 41 минуту
Кстати вполне себе работоспособный клиент и сервер (а тем более с учётом моей поправки.). Сортируй не хочу.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
03.05.2013, 14:34
Цитата Сообщение от kravam Посмотреть сообщение
А вдруг компилятор сделает так
не сделает. во всяком случае если это не вы его написали
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
04.05.2013, 02:21
почему не сделает?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
04.05.2013, 15:16
Цитата Сообщение от kravam Посмотреть сообщение
почему не сделает
из-за того что существуют приоритеты и порядок выполнения операций
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
04.05.2013, 17:39
А они, наверное, прописаны где-то да?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
06.05.2013, 10:16
Цитата Сообщение от kravam Посмотреть сообщение
А они, наверное, прописаны где-то да?
да. строчку стандарта указать не могу. к сожалению. см. например стр. 46 Подбельский Язык C++. там указаны ранги (приоритеты) операций и ассоциативность (порядок выполнения в выражении).
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
06.05.2013, 15:46
*говорит нуп*
Так вы отправляйте весь массив данных как целый буффер с разделителями(естественно чтоб так же при отправке указывался размер отправленного и если отправленные данные велики - то отправлять частями с проверкой), а при получении - писать функцию сортировки через разделительные символы уже из буффера в массив который нужен.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
06.05.2013, 15:49
Цитата Сообщение от Izual Посмотреть сообщение
если отправленные данные велики
тогда уж наворотить свой протокол со сборкой массива из пакетов на той стороне ибо если мы его распилим он может прийти туда непойми в какой очередности
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
06.05.2013, 18:57
Цитата Сообщение от vxg Посмотреть сообщение
тогда уж наворотить свой протокол со сборкой массива из пакетов на той стороне ибо если мы его распилим он может прийти туда непойми в какой очередности
так просто в структуру(массив) и проверку каждого на дату прихода и проверку на "правильность"..
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
08.05.2013, 10:14
Цитата Сообщение от Izual Посмотреть сообщение
так просто в структуру(массив) и проверку каждого на дату прихода и проверку на "правильность"
1 клиент режет массив на пакеты каждый из которых содержит в себе индекс первого элемента в массиве и некоторое количества элементов.
2 кидает пакеты на сервер получая для каждого пакета ответ или (если не получает ответ) делает повторную передачу пакета
3 сервер собирает пакеты в соответствии с индексами, сортирует, отправляет на клиент по аналогичной схеме
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
08.05.2013, 12:04
Цитата Сообщение от vxg Посмотреть сообщение
1 клиент режет массив на пакеты каждый из которых содержит в себе индекс первого элемента в массиве и некоторое количества элементов.
2 кидает пакеты на сервер получая для каждого пакета ответ или (если не получает ответ) делает повторную передачу пакета
3 сервер собирает пакеты в соответствии с индексами, сортирует, отправляет на клиент по аналогичной схеме
По индексу или по времени, один фиг =)
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
08.05.2013, 12:16
Цитата Сообщение от Izual Посмотреть сообщение
По индексу или по времени, один фиг =)
очень смешно. если вы имеете ввиду дату прихода то она ни о чем не говорит. сообщения UDP отправленные как 1 2 могут прийти как 2 1

Добавлено через 42 секунды
т.е. так не выйдет. во всяком случае если эту дату не писать на отправляющей стороне прямо в пакет

Добавлено через 42 секунды
что в свою очередь проигрывает естественно воспринимаемому мозгом "смещению" первого элемента в передаваемом пакете относительно начала всего массива
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
08.05.2013, 13:30
Цитата Сообщение от vxg Посмотреть сообщение
очень смешно. если вы имеете ввиду дату прихода то она ни о чем не говорит. сообщения UDP отправленные как 1 2 могут прийти как 2 1

Добавлено через 42 секунды
т.е. так не выйдет. во всяком случае если эту дату не писать на отправляющей стороне прямо в пакет

Добавлено через 42 секунды
что в свою очередь проигрывает естественно воспринимаемому мозгом "смещению" первого элемента в передаваемом пакете относительно начала всего массива
Это как это 1 2 придут как 2 1 ? Если уж говорить о UDP, то либо придёт 1 2, либо что то одно, либо ничего. По поводу времени - я как бы думаю типа как "пакет отперавляется - сервер при получении отсылает 1 при успешном принятии, если ничего не пришло, то клиент ждёт и переотправляет до тех пор пока 1 не придёт обратно, и только тогда идёт следущяя часть буфера для отправки" - тогда по принятии частей можно их сохранять в временные переменные с указанием GetCurrentTime(ну типа того), и при полном получении всех частей - собирать их согласно времени прибытия.

А если делать как вы сказали - то смысла особо не будет имхо, т.к. время отправки и время получения клиента и сервера в любом случае не будут совпадать... Если только по другому использовать время отправки, тогда можно будет обойтись без лишнего подтверждения единицей отправителю...
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
08.05.2013, 13:46
Цитата Сообщение от Izual Посмотреть сообщение
Это как это 1 2 придут как 2 1
я имел ввиду что если я отправляю сообщения:
первое "1111"
второе "2222"
то на сервер они могут прийти в следующем порядке
"2222" "1111"
Цитата Сообщение от Izual Посмотреть сообщение
пока 1 не придёт обратно
не вижу смысла делать эхо если можно просто подтвердить прием пакета
Цитата Сообщение от Izual Посмотреть сообщение
время отправки и время получения клиента и сервера в любом случае не будут совпадать
и что? если писать в сообщение время отправки или индекс (что удобнее) то они будут однозначно говорить об очередности отправки на отправляющей стороне. принимающая сторона соберет их в соответствии с этими данными вне зависимости от своего времени
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2013, 13:46
Помогаю со студенческими работами здесь

Сортировка массива и сортировка строка матрицы
1) Создание массива А с помощью рандома с целыми от -100 до 100 и вывести его на экран. Отсортировать по возрастанию на экран. 2) Создать...

Одномерные массивы. Вставка, удаление элементов массива. Перестановка элементов массива. Сортировка массива методом пузырька
Помогите пожалуйста! Дан массив, состоящий из N букв латинского алфавита а) Заполнить массив датчиком случайных чисел б)...

Сортировка массива. Упорядочить нечетные элементы массива по возрастанию методом обмена
Упорядочить одномерный массив по возрастанию, методом обмена. (по возрастанию должны быть толбко нечётные элементы)

Сортировка массива, вывести значения массива после каждого прохода цикла
Всем привет. Помогите, пожалуйста. Нужно отсортировать массив и вывести значения массива после каждого перемещения значений внутри массива,...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа находились в начале, а отрицательные - в конце...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru