using System; using System.Diagnostics; using System.Text; using System.Net.Sockets; using System.Reflection; using System.Xml; using System.Collections; namespace Trace { /// /// TraceListener is a specialized TraceListener that sends the output /// of Debug.Write or Debug.WriteLine to a server using /// UDP/IP. This class is intended to be used with the TraceViewer VS.Net Add-In. /// public class TraceListener : System.Diagnostics.TraceListener, IDisposable { private TcpClient client = null; [Conditional("DEBUG")] /// /// Call this method to hook to the Debug infrastructure a /// TraceListener that sends its output to the specified server /// and port /// /// The IP address or name of the server /// The port number the server is listening to /// /// /// /// /// /// public static void InstallTcpTraceListener(string server, int port) { Debug.Listeners.Add(new TraceListener(server, port)); } /// /// Constructor that takes a server IP address and port /// /// The server address or name /// The server port number public TraceListener(string server, int port) { client = new TcpClient(server, port); } public override void Write(string message) { SendString(message); } public override void WriteLine(string message) { SendString(message); } public override void Close() { client.Close(); base.Close (); } public void Dispose() { this.Close(); } private void SendString(string message) { NetworkStream stream = client.GetStream(); Byte[] data = System.Text.Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); } } }