在开发Pocket PC应用程序时,经常会遇到需要查看代码中散布的跟踪消息的情况。如果已经开发了一段时间的代码,就会知道,第二好的选择是有一个控制台窗口,可以在其中看到这些消息。但是,如果没有知识,也没有时间构建一个与IDE集成的解决方案,那么在本文中,将展示一个控制台应用程序,该程序可以在主机PC上显示在Pocket PC上运行的Compact Framework代码中传递给System.Diagnostics.Debug.Write或System.Diagnostics.Debug.WriteLine调用的字符串。
套接字是几乎所有系统中两个应用程序之间通信的最简单方式之一。但在.NET框架中,可以找到一对补充类,它们进一步简化了套接字API:System.Net.Sockets.TcpClient和System.Net.Sockets.TcpListener。当然,它们的底层实现使用了套接字,对于任何曾经使用过套接字API编程的人来说,它们的使用模式应该不会让人感到惊讶。
TcpListener和TcpClient提供的同步阻塞通信并不提供套接字的所有灵活性,但在这种情况下,它们满足了适度需求。可以在MSDN库中找到更多关于套接字和System.Net.Sockets命名空间的信息。
System.Diagnostics命名空间提供了一种机制,允许跟踪消息有多个输出。当调用Debug或Trace类的Write和WriteLine方法时,它们会调用每个为此目的注册的监听器的相应方法。系统提供了一些TraceListener抽象类的实现,这些类将消息定向到调试器的输出窗口、输出流或事件日志。如果需求与系统提供的选项不同,需要编写自己的System.Diagnostic.TraceListener实现,并将其添加到监听器集合中。
可以在这里找到有关跟踪监听器的文档。
TcpTraceConsole是一个控制台应用程序,它充当服务器。它等待连接到其命令行中指定的IP地址和端口。当建立连接时,它只是使用System.Console.WriteLine来显示每个接收到的消息。
显然,它必须在运行Pocket PC应用程序之前在主机PC上启动。例如,如果PC的IP地址是192.168.1.1,它的端口14001尚未使用:
C:>TcpTraceConsole 192.168.1.1 14001
直接从TraceListener派生出TcpTrace.TcpTraceListener,并覆盖了Write和WriteLine方法,将它们的输出重定向到控制台应用程序,通过TcpClient实例。这个类被打包在自己的程序集中,所以它可以在任何应用程序中使用:
在项目中添加对TcpTrace.dll的引用
在代码中调用Debug.Trace之前,调用静态方法TcpTrace.InstallTcpTraceListener。如果使用带参数的版本,需要提供用来启动TcpTrace控制台应用程序的相同地址和端口。如果使用无参数版本,工作目录必须包含一个应用程序配置文件,以如下方式指定地址和端口:
<configuration>
<appSettings>
<add key="TcpTraceServer" value="" />
<add key="TcpTracePort" value="" />
</appSettings>
</configuration>
在源代码和演示.zip文件中,有一个Pocket PC WinForms应用程序,展示了TcpTrace.TcpTraceListener的使用。
要运行PpcTraceClient.exe应用程序,必须:
将PpcTraceClient.exe、PpcTraceClient.exe.config、TcpTrace.dll和NetTech.Configuration.dll文件复制到设备上的一个文件夹中