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(); }
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); } } }