Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            dwgFile          = args[0];
            dwgPath          = dwgFile.Replace(".dwg", "") + "\\";
            pkgInfo.IsHeader = true;
            pkgInfo.Length   = pkgHeaderSize;
            if (client.Connect("192.168.2.18", 1137) == true)
            {
                using (var fs = new FileStream(dwgFile, FileMode.Open))
                {
                    // 封包体
                    byte[] bodyBytes = new byte[fs.Length];
                    fs.Read(bodyBytes, 0, bodyBytes.Length);
                    fs.Close();
                    // 封包头
                    PkgHeader header = new PkgHeader();
                    header.Id       = ++id;
                    header.BodySize = bodyBytes.Length;
                    byte[] headerBytes = client.StructureToByte <PkgHeader>(header);


                    // 组合最终发送的封包 (封包头+封包体)
                    byte[] sendBytes = DwgUtils.GetSendBuffer(headerBytes, bodyBytes);
                    client.Send(sendBytes, sendBytes.Length);
                }
            }

            client.OnClose   += Client_OnClose;
            client.OnConnect += Client_OnConnect;
            client.OnReceive += Client_OnReceive;
            client.OnSend    += Client_OnSend;

            System.Diagnostics.Process.GetCurrentProcess().WaitForExit();
        }
Ejemplo n.º 2
0
        private static byte[] GetSendBuffer(byte[] bodyBytes)
        {
            var header = new PkgHeader
            {
                Id       = ++_id,
                BodySize = bodyBytes.Length
            };
            var p = Guid.NewGuid().ToString().ToCharArray();

            header.Token = new char[32];
            var j = 0;

            foreach (var t in p)
            {
                if (t != '-')
                {
                    header.Token[j++] = t;
                }
            }
            var headerBytes = HClient.StructureToByte(header);
            var ptr         = IntPtr.Zero;

            try
            {
                var bufferSize = headerBytes.Length + bodyBytes.Length;
                ptr = Marshal.AllocHGlobal(bufferSize);
                Marshal.Copy(headerBytes, 0, ptr, headerBytes.Length);
                Marshal.Copy(bodyBytes, 0, ptr + headerBytes.Length, bodyBytes.Length);
                var bytes = new byte[bufferSize];
                Marshal.Copy(ptr, bytes, 0, bufferSize);
                return(bytes);
            }
            finally
            {
                if (ptr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(ptr);
                }
            }
        }