public static void TestMailSlot()
        {
            //int i = 0;
            MailSlotTransport transport = new MailSlotTransport();
            //StringBuilder sb = new StringBuilder();
            //while (true)
            //{
            //    if (transport.Ready)
            //    {
            //        sb.Append("|" + sb.Length);
            //        bool retval = transport.Send("csharp.test.mailslot:1|c|" + sb.ToString());
            //        Console.WriteLine("return " + retval);
            //    }
            //}
            string         SLOTNAME   = @"\\.\mailslot\afcollectorapi";
            SafeFileHandle slotHandle = NativeMailSlot.CreateFile(SLOTNAME,
                                                                  (uint)FileAccess.Write,
                                                                  (uint)FileShare.ReadWrite,
                                                                  0,
                                                                  (uint)FileMode.Open,
                                                                  (uint)FileAttributes.Normal,
                                                                  0);
            FileStream fs = new FileStream(slotHandle, FileAccess.Write);

            UnicodeEncoding encoding    = new UnicodeEncoding();
            string          data_string = string.Format("{0}:{1}:{2}", Process.GetCurrentProcess().Id, 3, "csharp.test.mailslot:1|c");

            byte[] data_bytes = encoding.GetBytes(data_string);
            int    byteCount  = encoding.GetByteCount(data_string);

            fs.Write(data_bytes, 0, byteCount);
            fs.Flush();

            int  size = 0, nextsize = 0, count = 0, timeout = 0;
            bool succeeded = false;

            if (slotHandle.IsInvalid)
            {
                Console.WriteLine("MailSlot handle is invalid");
                return;
            }
            try
            {
                succeeded = NativeMailSlot.GetMailslotInfo(slotHandle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
            if (succeeded)
            {
                Console.WriteLine(String.Format("size {0}, nextsize {1}, count {2}, timeout {3}",
                                                size, nextsize, count, timeout));
            }
            else
            {
                Console.WriteLine(String.Format("can't get mailslot info {0:d}", Marshal.GetLastWin32Error()));
            }
        }
示例#2
0
        private FileStream CreateFileStream(String slotName)
        {
            SafeFileHandle slotHandle = NativeMailSlot.CreateFile(
                slotName,
                (uint)FileAccess.Write,
                (uint)FileShare.ReadWrite,
                0,
                (uint)FileMode.Open,
                (uint)FileAttributes.Normal,
                0);

            if (!slotHandle.IsInvalid)
            {
                FileStream fs = new FileStream(slotHandle, FileAccess.Write);
                return(fs);
            }
            else
            {
                throw new Exception("MailSlot Cannot be initialized: Handle is Invalid");
            }
        }