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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

Добрый вечер написала клиентское и серверное приложения
Сервер:
Код:
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;
using System.Threading;

namespace MailSlot_application
{

    public partial class FormMain : Form
    {
        public int pn;

        public FormMain()
        {
            InitializeComponent();
        }

        public void buttonCreate_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(pipe);
//=============================================================================================================
//            создание канала
//=============================================================================================================
            pn = Import.CreateNamedPipe("\\\\.\\pipe\\my", (uint)Types.PipeOpenModeFlags.PIPE_ACCESS_DUPLEX, (uint)Types.PipeModeFlags.PIPE_TYPE_BYTE, (uint)Types.PIPE_UNLIMITED_INSTANCES, 0, 1024, (uint)Types.NMPWAIT_WAIT_FOREVER, (uint)IntPtr.Zero);
            if (pn == -1) MessageBox.Show("ошибка при создании");
            else
            {
                buttonCreate.Enabled = false;
                t.Start();
            }
        }

        public void pipe()
        {
//=============================================================================================================
//           описание данных
//=============================================================================================================
            bool flag = true;   //флаг указывающий нужно ли продолжать опрос
            uint next_size = 0;   //размер следующего сообщения  
            byte[] buf = new byte[256]; //буфер для хранения сообщения
            uint real_size = 0;  //количество реально считанных байт

//=============================================================================================================
//            работа с каналом
//=============================================================================================================            
            while (flag)
            {
                if (Import.ConnectNamedPipe(pn, IntPtr.Zero))//проверка состояния канала
                {

                        if (Import.ReadFile(pn, buf, next_size, ref real_size, 0))
                        {
                            byte[] RetValue = new byte[real_size];
                            System.Array.Copy(buf, RetValue, real_size);
                            string temp = System.Text.Encoding.Default.GetString(RetValue);
                            temp = ReverseArrayFramework(temp);
                            MessageBox.Show(temp);
                        }
                    }
            }
        }


        private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
        {
            Import.CloseHandle(pn);
        }

        public string ReverseArrayFramework(string str)
        {
            char[] arr = str.ToCharArray();
            Array.Reverse(arr);
            return new String(arr);
        }
    }
}
Клиент:
Код:
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_client
{
    public partial class FormMain : Form
    {
        public int pn;
        public FormMain()
        {
            InitializeComponent();
        }

        private void buttonSend_Click(object sender, EventArgs e)
        {
            byte[] mes; //содержимое сообщения
            uint real_size = 0; //колчиство реально прочитанных байт
            mes = System.Text.Encoding.Default.GetBytes(textBox1.Text);
            Import.WriteFile(pn, mes, (uint)mes.Length, ref real_size, 0);
            
        }

        private void FormMain_Shown(object sender, EventArgs e)
        {
            pn = Import.CreateFile("\\\\.\\pipe\\my", Types.EFileAccess.GenericWrite, Types.EFileShare.Write, 0, Types.ECreationDisposition.OpenExisting, 0, 0);
            if (pn == -1) MessageBox.Show("ошибка при открытии");
        }

        private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
        {
            Import.CloseHandle(pn);
        }
    }
}
Но при отправке сообщения на сервер приходит пустое сообщение, прпод говорит ошибка в параметрах, но он не может подсказать где именно, вот обращаюсь к вам, и еще один вопрос почему при повторной отправке сообщения возникает ошибка?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация базы... BROOKS Помощь студентам 1 21.01.2010 17:39
Реализация РПГ... Shadow_1329 Gamedev - cоздание игр: Unity, OpenGL, DirectX 20 16.08.2009 18:40
Ctrl+Z реализация delphin100 Общие вопросы Delphi 6 10.09.2008 06:59
Реализация конфигуратора BlackOmen Общие вопросы Delphi 3 30.05.2008 17:12
Реализация тестов aleksei111 Общие вопросы Delphi 2 20.05.2008 12:15