Добрый вечер написала клиентское и серверное приложения
Сервер:
Код:
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);
}
}
}
Но при отправке сообщения на сервер приходит пустое сообщение, прпод говорит ошибка в параметрах, но он не может подсказать где именно, вот обращаюсь к вам, и еще один вопрос почему при повторной отправке сообщения возникает ошибка?