Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2010, 16:01   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию MailSlot

Добрый день, помогите пожалуйста с задание, необходимо используя технологию MailSlot реализовать сервер и клиента, вот пишу сервер. Выложу код чтобы спрашивать по нему. У меня есть кнопка по ее нажатии создается MailSlot, затем он постоянно проверяется на наличии сообщения, вот что получилось:
Код:
        private void buttonCreate_Click(object sender, EventArgs e)
        {
            //создание MailSlot
            int ms = Import.CreateMailslot("\\\\.\\mailslot\\my", 0, Types.MAILSLOT_WAIT_FOREVER,0);
            buttonCreate.Enabled=false;

            //проверка состояния mailslot
            bool flag=true;
            while (flag)
            {
                if (Import.GetMailslotInfo() == true)
                { 
                    //если есть сообщение запишем его
                    textBox1.Clear();
                    byte[] data;
                    if (Import.ReadFile())
                    {
                        textBox1.Text = "";
                    }
                }
            }
        }
Дак вот возникли вопросы как правильно вызывать функцию GetMailslotInfo(), вот ее параметры
hMailslot - дескриптор канала Mailslot;
lpMaxMessageSize - максимальный размер сообщения;
lpNextSize – размер следующего сообщения;
lpMessageCount – количество сообщений;
lpReadTimeout – время ожидания.

Второй вопрос аналогичный только функция ReadFile(), ее параметры
hFile – дескриптор реализации канала;
lpBuffer – адрес буфера, куда будут прочитаны данные из канала;
lpNumberOfBytesWritten – размер буфера;
lpNumberOfBytesWritten - число байт, действительно прочитанных из канала;
lpOverlapped – зависит от режима работы.

Хотела бы чтобы вы написали как их в данной ситуации правльно вызвать, какие фактические значения должны получить эти функции
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 20.03.2010, 16:29   #2
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

посмотри примерчик. я сам с mailslot не работал. поэтому могу предложить только это
http://www.codeproject.com/KB/miscct...MailSlots.aspx
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 20.03.2010, 17:02   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

чет не особо получается
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 20.03.2010, 17:39   #4
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

пример скачать не получается? ))
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 20.03.2010, 18:06   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

да нет тот код использовать который в примере
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 20.03.2010, 19:04   #6
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

У кого-нибудь еще есть идеи?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 20.03.2010, 19:22   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

не знаю продвинулась ли нет, но немного переписала код, вот что теперь
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ChatClient;

namespace MailSlot_application
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void buttonCreate_Click(object sender, EventArgs e)
        {
            //создание MailSlot
            int ms = Import.CreateMailslot("\\\\.\\mailslot\\my", 0, Types.MAILSLOT_WAIT_FOREVER, 0);
            buttonCreate.Enabled = false;

            //проверка состояния mailslot
            bool flag = true;
            while (flag)
            {
                string temp = ReadMailSlot(ms);
                textBox1.Text = temp;
            }
        }
        
        public string ReadMailSlot(int mail_slot)
        {
            uint nextMes=0;
            uint count=0;
            if (Import.GetMailslotInfo(mail_slot,255,ref nextMes,ref count,1000)==true)
            {
                //readFile
            }
            return "1";
        }
    }
}
На последнем if выдает исключение о том что обращение к защищенной памяти и что все-таки писать нужно на самом деле и что должно быть в readFile?? Помогите пожалуйста, прикрепляю проект
Вложения
Тип файла: rar MailSlot_application_server.rar (40.3 Кб, 25 просмотров)
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 20.03.2010 в 19:31.
Sparky вне форума Ответить с цитированием
Старый 04.03.2011, 18:20   #8
victor5
 
Регистрация: 28.08.2010
Сообщений: 5
По умолчанию

Спасибо за примерчик, а есть пример данной реализации затеи MailSlot-сервер на Делфях?
victor5 вне форума Ответить с цитированием
Старый 04.03.2011, 18:27   #9
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

не знаю, мне нужно было писать на c#
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц