Аватар для Drozd Oleg
1 / 1 / 2
Регистрация: 21.02.2010
Сообщений: 62

Передача матрицы через почтовый ящик

14.02.2011, 16:32. Показов 1699. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем участникам форума. Идея моя такова.
Клиент:
Генерируется прямоугольная матрица с введенным пользователем числом строк/столбцов, заполняется случайными числами от 1 до 99 и передается через почтовый ящик (ПЯ) серверу. Сначала передается число строк, потом число столбцов, потом цикл передачи элементов матрицы поштучно.
Сервер:
Принимает данные из ПЯ и выводит матрицу на экран. Все происходит на одном компьютере. Компиляция на MS VS 2008 проходит без ошибок, но окно клиента закрывается сразу же, а сервер просто "висит" и ничего не получает.
Вопрос: где у меня могут быть косяки (только подробно, пожалуйста, с кодом), и можно ли передать матрицу через ПЯ всю целиком за раз? Если да, то как?
Заранее спасибо.
Клиент:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h> 
#include <time.h>
 
// Функция ввода элементов матрицы   
void Input(int** matr, int rows, int cols)
{
    int i, j;
    for(i = 0; i < rows; i++)
    {
        for(j = 1; j <= cols; j++)
        {
            // заполняем матрицу случайными числами    1...99
            matr[i][j] = rand() % 99 + 1;
         }
    }
}
 
// Функция вывода матрицы
void Output(int** matr, int rows, int cols)
{
    int i, j;
    for(i = 0; i < rows; i++)
    {
        for(j = 1; j <= cols; j++)
        printf("%3d", matr[i][j]);
    }
}
 
int main(int argc, char* argv[])
{   
    setlocale(LC_ALL, "Russian");
 
    int **matrix, rows, cols;
    int i, j;
 
    HANDLE Mailslot;
    DWORD BytesWritten;
    CHAR ServerName[256];
 
    //Создаем ПА
    sprintf(ServerName, "\\\\.\\Mailslot\\Slot1");
    if ((Mailslot = CreateFile(ServerName
        , GENERIC_WRITE
        , FILE_SHARE_READ
        , NULL, OPEN_EXISTING
        , FILE_ATTRIBUTE_NORMAL
        , NULL)) 
        == INVALID_HANDLE_VALUE)
    {
        printf("Создание файла с ошибкой %d\n", GetLastError());
        return 0;
    }
    
    // 'запускаем' гегератор случайных чисел
    srand((unsigned)time(NULL)); 
 
    // просим пользователя ввести размеры матрицы
    printf("Введите количество строк: \n");
    scanf("%d", &rows);
    printf("Введите количество столбцов: \n");
    scanf("%d", &cols);
 
    // выделяем память для динамической матрицы
    matrix = (int **)malloc(sizeof(int *) * rows);
    for(i = 0; i < rows; i++)
        matrix[i] = (int *)malloc(sizeof(int) * (cols + 1));
 
    // ввод элементов матрицы
    Input (matrix, rows, cols);
 
    // вывод исходной матрицы
    printf("Исходная матрица: \n");
    Output(matrix, rows, cols);
    
    // Передаем число строк
    if (WriteFile(Mailslot
        , (LPCVOID)&rows
        , sizeof (rows)
        , &BytesWritten
        , NULL
            ) == 0
            )
        {
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return 0;
        }
    printf("Записано %d байтов\n", BytesWritten);
 
    // Передаем число столбцов
    if (WriteFile(Mailslot
        , (LPCVOID)&cols
        , sizeof (cols)
        , &BytesWritten
        , NULL
            ) == 0
            )
        {
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return 0;
        }
    
     printf("Записано %d байтов\n", BytesWritten);
     // Передаем элементы матрицы
    for(i = 0; i < rows; i++)
    {
        for(j = 1; j <= cols; j++)
            if (WriteFile(Mailslot
                    , (LPCVOID)&matrix[cols][rows]
                    , sizeof (matrix[cols][rows])
                    , &BytesWritten
                    , NULL
                    ) == 0
                    )
            {
            printf("Запись в файл с ошибкой %d\n", GetLastError());
            return 0;
            }
 
    }
    CloseHandle(Mailslot);
    
    // освобождаем память
    for(i = 0; i < rows; i++)
        free(matrix[i]);
    free(matrix);
    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
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <locale.h>
 
void main(void)
{
    setlocale(LC_ALL, "Russian");
    
    HANDLE Mailslot;
    int buffer, cols, rows, i, j, **matrix_end;
    DWORD NumberOfBytesRead;
    // Создание почтового ящика
    if ((Mailslot = CreateMailslot("\\\\.\\Mailslot\\slot1", 0, MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Ошибка при создании ПЯ %d\n", GetLastError());
        return;
    }
    // Считывание количества строк
    ReadFile(Mailslot, &buffer, sizeof(buffer), &NumberOfBytesRead, NULL);
    buffer = rows;
    printf("Количество строк: \n");
    printf("%d\n", rows);
 
    // Считывание количества столбцов
    ReadFile(Mailslot, &buffer, sizeof(buffer), &NumberOfBytesRead, NULL);
    buffer = cols;
    printf("Количество столбцов: \n");
    printf("%d\n", cols);
 
    // выделяем память для динамической матрицы
    matrix_end = (int **)malloc(sizeof(int *) * rows);
    for(i = 0; i < rows; i++)
        matrix_end[i] = (int *)malloc(sizeof(int) * (cols + 1));
        
    // Считывание элементов матрицы
    for(i = 0; i < rows; i++)
    {
        for(j = 1; j <= cols; j++)
        {
            ReadFile(Mailslot, &buffer, sizeof(buffer), &NumberOfBytesRead, NULL);
            matrix_end[cols][rows] = buffer;
         }
    }
    // Вывод матрицы на экран
    printf("Полученная матрица: /n");
    for(i = 0; i < rows; i++)
    {
        for(j = 1; j <= cols; j++)
        printf("%3d", matrix_end[i][j]);
    }
    system("pause");
    CloseHandle(Mailslot);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2011, 16:32
Ответы с готовыми решениями:

Передача матрицы через разделяемую память
Добрый день. Помогите, пожалуйста, не получается передать матрицу (динамический двумерный массив) с помощью разделяемой памяти через...

Чёрный ящик или белый ящик
Всем привет. Задали программу написать a + b и сумму вывести в файл, а птом протестировать либо на чёрный ящик, либо на белый ящик. Я...

Передача формы заказа сформированной в таблице через $ post на почтовый ящик
Добры день На сайте с K2store есть форма заказа в один клик Помогите решить задачу по передать данных о заказанном товаре(услуге) в...

1
 Аватар для dyosick
64 / 64 / 17
Регистрация: 25.08.2008
Сообщений: 178
14.02.2011, 20:30
Я б на твоем месте записал матрицу в файл txt и передавал бы его, а размеры ее тоже в файл закинь. Просто удобно все это запиши в файл и правильно считай с него.
Если что, обращайся, чем смогу, помогу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2011, 20:30
Помогаю со студенческими работами здесь

Требуется взломать почтовый почтовый ящик
Здравствуйте! требуется взломать почтовый ящик. Пишите в личку.

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

Почтовый ящик
Добрый день! вопросец: пользователе сделал архивирование почты в ней в папке &quot;входящие&quot; письма не видны, видны в других...

Почтовый ящик
Добрий день товарищи!!! Помогите написать задачу.. Написать программу для сортировки почты, которая позволяет ввести с клавиатуры...

Почтовый ящик
В почтовом ящике лежат письма, каким то образом можно понять входящие письмо или нет (кроме визуального)?? Допустим открывая письмо из...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru