<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[程序之巢2012]]></title>
<link>http://blog.pfan.cn/sword2008</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[试试]]></title>
		<link>http://blog.pfan.cn/sword2008/54120.html</link>
		<description><![CDATA[http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CFcRfH0GoT805sipKjzXK2yRVjIrKTD9BtXsY7rrzZaKcgSEq4elFfTXFW65ecG02E1TovKT8zyLFpaQztPSDbVcw%3D%3D


	


	


	
【夜总惠】Lenovo/联想 B475AA43300W4 A4 笔记本电脑 500G 独显]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2013-02-20 20:46:00</pubDate>
		</item>
				<item>
		<title><![CDATA[跨平台开发工具Titanium的兴起之路：HTML5是最大威胁]]></title>
		<link>http://blog.pfan.cn/sword2008/53047.html</link>
		<description><![CDATA[http://blog.csdn.net/ydj9931/article/details/7028400
&nbsp;
Apple的iPhone和iPad如今或许是最有型的装备了——事实上，San Francisco博物馆的现代艺术部分（the San Francisco Museum of Modern Art）已将其在工业设计展览中展出。与它有型的外表相比，它的iOS设备却使用了一种相当古老的语言：Objective-C。这个语言在1980年代晚期就开始占据统治地位了，主要是Steve Jobs的NeXT用来为公司的工作站设计用户界面的。
Objective-C与大多数现代编程语言和脚本语言比如Javascript、Python、 Ruby相比，不够强大，且更难学，因此追随者也少。“世界上很少有人知道Objective-C了，” Jeff Haynie说。与此相反，“有八百万到一千万Web开发者知道Javascript和HTML。”与Apple类似，Google的Android也好不到哪里去，Android操作系统是基于Java的——另外一个即将消亡的过分讲究的语言。
Haynie的观点是，开发者没有必要再去学Objective-C或者Java去给当今发展最快的计算平台——智能手机和平板电脑写应用了。而这，就是Appcelerator公司得以发展的原因。Appcelerator公司是Haynie在2007年在Atlanta,GA与其他人联合创立的一所公司，并于2008年搬到了硅谷。这个公司在新的风投中已经获得了15,000,000美元，它主要的产品是一种软件，这种软件能让用Web语言编写的程序转化成在iOS和Android上一样跑的很好的移动应用，甚至能在Mac和Windows机器上运行。
现在iTunes应用商店中的500,000应用中，有几乎五分之一是基于Titanium开发的，Titanium是Appcelerator公司旗下的跨平台开源开发框架。这个框架最成功的案例是NBC Universal的iPad应用，这个应用可以让用户观看NBC节目、玩游戏等。“这个应用是由一个Javascript开发者在三个月内写成的。” Haynie说。而之前尝试用Objective-C开发这个应用，“花了四个人六个月时间，很贵，完全是一场灾难。”

  App]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2011-12-03 15:13:00</pubDate>
		</item>
				<item>
		<title><![CDATA[你也配吃10元的盒饭？]]></title>
		<link>http://blog.pfan.cn/sword2008/53046.html</link>
		<description><![CDATA[又是一个阳光灿烂的中午，看了一上午的报纸，茶水也顺带喝了不少，肚子早已经咕咕作响了，今天中午吃点什么了，貌似楼下的新开张的盒饭还不错，于是我来到楼下准备买上一盒。
&nbsp; 菜色还不错，价格有6元，8元，10元，12元，20元的，像哥这样的精英管理人才，怎么着也的吃最高级的才配合身份，就在我准备购买时，一个响亮的声音响起，
&nbsp; "老板，给我一份10元的盒饭"，
&nbsp; 顺势撇了一眼，一个小伙子，眉开眼笑的靠近盒饭铺，今天是1号，看样子是发工资了。就当他走近时，看到了我，刚才的欢愉的表情瞬时黯淡下去，他知道我认出了他，靠，满头白里带一点黑的头发，永远没睡醒的眼神，以及那凌乱的胡渣子，都出卖了他的身份。我继续狠狠的盯着他，他越发的羞愧了，我犀利的眼神正在和他做着底层通信，我默默的向他传达一个信息，
&nbsp; "你，也配吃10元的盒饭?".
&nbsp; 他哀怜的眼神似乎在祈求我不要拆穿他的身份，可惜，哥这么有正义感的人，怎么能在这个时候放弃原则！
&nbsp; "你不是隔壁公司的程序员么？"
&nbsp; 就这一瞬间，他整个人似乎崩溃下去，刚才欢愉的表情彻底变为哭丧，周围的小摊贩以及路人甲乙丙丁，都纷纷投来了鄙视的眼光，他瘟鸡一样的双手抓着头发，痛苦的蹲了下去。
&nbsp; 就在这时，人群中终于有人忍不住了，大声呵骂到，
&nbsp; "呸,程序员也敢吃10元的盒饭，真不要脸"
&nbsp; 一位老大娘好心的提醒到，
&nbsp; "小伙子啊,你一个程序员，挣点钱不容易啊，怎么吃10元的盒饭啊"
&nbsp; 一名打扮妖艳入时的姑娘说到，
&nbsp; "人家当小姐的都才吃10元，你也敢要10元的？"
&nbsp; 我义正言辞的给他说到，
&nbsp; "我说一句话顶你写一万行代码，也才吃20元的盒饭，你竟敢吃10元的"
&nbsp; 老板也发话了，
&nbsp; "是程序员啊，太不好意思了，你吃6元的吧，不然人家知道我卖了你10元的，我这生意就做不了啊"
&nbsp; 他终于发出颤抖的声音说到
&nbsp; "对不起，我刚才说错了，给我一份6元的"。
&nbsp; 这时人群中爆发出激烈的掌声，我知道，这是我又一次坚持原则，换来的荣誉的赞赏！]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2011-12-03 15:08:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何在Windows&nbsp;2003,XP上安装Windows&nbsp;Phone&nbsp;7开发工具]]></title>
		<link>http://blog.pfan.cn/sword2008/53045.html</link>
		<description><![CDATA[很早就听说了Windows Phone 7的发布，一直想玩一下，但是很郁闷，公司的电脑是Windows 2003操作系统，而家里的破电脑也只安装了Windows XP系统。但是Windows Phone 7的开发工具只能在Viata和Windows 7上安装。但是还好，经过多方面的努力，还是找到了再Windows 2003和Windows XP安装Windows Phone 7的安装方法，简述如下：
&nbsp; &nbsp;&nbsp;&nbsp;1、在微软官方网站下载Windows Phone Developer Tools RTW：
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;官方下载地址为：http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&amp;displaylang=en
&nbsp; &nbsp;&nbsp;&nbsp;2、将下载到的文件(vm_web.exe)解压。在命令行模式下，输入vm_web.exe /x，提示如下图，
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 选择好文件解压的地址，我放在了E:\vm_web的目录下。
&nbsp; &nbsp;&nbsp; &nbsp;3、打开E:\vm_web\baseline.dat文件，找到[gencomp7788]这个节点，将下面的内容修改如下：
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; InstallOnAMD64=1
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; InstallOnFutureNT=1
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; InstallOnVista=0
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; InstallOnWin7=0
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; InstallOnLHS=0
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2011-12-03 14:46:00</pubDate>
		</item>
				<item>
		<title><![CDATA[在XP下搭建&nbsp;windows&nbsp;phone&nbsp;7的开发环境]]></title>
		<link>http://blog.pfan.cn/sword2008/53044.html</link>
		<description><![CDATA[&nbsp;http://topic.csdn.net/u/20111016/14/781184f7-1dc9-48cf-9cc9-bf200df94a50.html
&nbsp;
为那些想研究和学习微软 windows phone 7 手机开发开的的朋友们提供些帮助。
在 XP 系统下搭建 windows phone 7的开发环境，需要用到一个由传智播客老师开发的 WP7 模拟器，这款wp7模拟器可以运行在xp下，资源占用小，不需要DirectX10支持，在低端显卡上也能运行，模拟外设丰富，实现了WP7绝大部分API，包括启动器、选择器、外设，WP7特殊控件等等，想进一步了解的朋友可以参考，里面有详细的安装步骤和方法！
http://net.itcast.cn/ViewArticle-303.aspx

环境要求：.Net Framework 4、Silverlight4_Tools.exe、Silverlight 4.0开发人员运行时（Silverlight4_Developer）；VisualStudio 2010。
操作系统：Windows XP、Windows Vista、Windows 7。

给大家贴出来几张图片 看看效果……
新建一个项目

windows phone 7 项目的首页

模拟器的效果


可以查看模拟器中的地图 打电话 摄像头功能



查看写入的程序效果 输入文字，当前日期显示




希望能给那些想学习和了解 windows phone 7 开发的朋友们提供帮助]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2011-12-03 14:45:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Windows&nbsp;Phone&nbsp;7&nbsp;开发&nbsp;31&nbsp;日谈——第1日：项目模板]]></title>
		<link>http://blog.pfan.cn/sword2008/53043.html</link>
		<description><![CDATA[http://blog.csdn.net/porscheyin/article/details/5979839
&nbsp;
&nbsp;


By Jeff Blankenburg
在写“Windows Phone 7 开发 31 日谈” 系列的首篇文章时，我们需要做一些假设。
首先，我假设你懂一些Silverlight 的知识 。去年我写过一个Silverlight 31 日谈 的系列文章，所以我建议如果没接触过Silverlight你可以从那儿开始学习。本系列中的所有文章都假设你有Silverlight的基础知识。
其次，我假设你已经安装了所有所需的工具。你可以在这里http://developer.windowsphone.com 找到并下载它们。你需要Visual Studio 2010 for Windows Phone和Expression Blend 4 for Windows Phone。这两个你一定会用到，同时它们完全免费。如果你已经有了这些软件的正式版，它们将会更新这些项目的模板而非在你的机器上添加新的软件。
好了，我们开始吧。
今天，我们来看看在启动Visual Studio 2010时自带的一个默认的Windows Phone项目模板：Windows Phone Application。 
 
Solution Explorer （解决方案管理器） 
来看一下默认项目的解决方案管理器。我不准备解释每个文件的所有内容，但我会介绍它们的作用。如果你想看这些内容，安装这些工具 来试试！非常简单！
（在文章的结尾处我提供了可供下载的项目文件，如果你感觉自己比较懒的话。）
 
ApplicationIcon.png 
用来代表你程序的图片，你可以用另外的一个来替换这个图片。用户会在他们的程序中将看到此图片。它很重要，一定要设计好。
App.xaml 
这个文件和ASP.NET中的web.config文件很相似。你可以将供整个应用程序使用的数据和设置保存在此处。我也很喜欢将我的样式数据放在此文件中，但这并不是必须的。
App.xaml.cs 
上面那个文件的“代码后置”文件，在这儿你可以处理程序的“墓碑”。我们会在第14天中讲解多任务和墓碑的概念。
AppManifest.xml 
生成应用程序安装包(]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2011-12-03 14:44:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转用VC++6.0实现SNMP协议的方法(zt)]]></title>
		<link>http://blog.pfan.cn/sword2008/40790.html</link>
		<description><![CDATA[SNMP(Simple Network Management Protocol)是简单网络管理协议,主要用来管理网络设备，正因为“简单”，所以其发展很快，到目前为止几乎所有的网络产品都要为其提供支持，以方便管理员的管理和软件开发人员的开发。　　在这里我们不对有关SNMP的概念和基础知之作过多地阐述，一且假定你对其工作原理有了一定的了解，而仅缺的是如何去实现他。　　我们所阐述的是基于VC6.0下的SNMP编程。详细介绍一下有关SNMP编程的过程及API函数的用法，在遇到难于理解的部分，我会以较大的篇幅作以解释。言归正传，进入我们的主题。　　首先来阐述几个重要的概念：　　1、community (共同体名):如果翻译过来可能会显得难于理解，其实你完全可以把它理解为一个带有权限的登陆账户，这是你访问网络设备的重要凭据，比如你要访问交换机，假如交换机的community是public，其权限是只读的，那你一次用户登陆交换机就可以查看有关交换机记录的数据。如果其权限是读写的，你你就有权修改其中的一些设置，如封锁某一个交换机的端口。大部分交换机默认情况下，以public作为只读community，以private作为读写community。　　2、Oid(对象标志符):是以SMI(Structure of Management Information)管理信息结构为基础的一系列点分符号，如1.3.6.1.2.1.1.1，这些点分符号在任何网络设备中都唯一标识某一个数据参数。他们的集合我们称为MIB(Management Information Base)管理信息库。对于他们所标识的意义，读者可以到网上查询一下，提供一个简单的寻找办法，你可以进入google，直接输入1.3.6.1.2.1.1等点分字符串。　　下面进入我们的正题。　　和其他编程过程一样，整个SNMP编程也要经过一个创建，执行，销毁的过程，通俗点说就是要做准备，初始化SNMP环境即加载SNMP的功能，接着就要执行所进行的操作，SNMP是基于消息机制的，所以消息传递与管理是我们在编程中所必须注意的问题，最后要进行销毁和回收资源，这一点相信编程人员都会注意到。以下我们按步骤给予详细介绍：　　1、加载SNMP，用到的函数是SnmpStartup(smiLPUINT32 nMajorVersion,&nbsp; &nbsp]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2009-02-10 11:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[什么是ICS主机，如何配置ICS主机]]></title>
		<link>http://blog.pfan.cn/sword2008/40723.html</link>
		<description><![CDATA[“Internet联机资源共享”这就叫ICS，你的计算机打开这个服务那你的计算机就叫ICS主机。 启用 ICS 1. 打开“网络连接”。 2. 在“拨号”或“LAN 或高速 Internet”下面，右键单击要启用 ICS 的连接，然后单击“属性”。 3. 在“高级”选项卡的“Internet 连接共享”下面，选中“允许其他网络用户通过此计算机的 Internet 连接来连接”复选框。 4. 如果存在，则在“选择一个专用网络连接”下拉框的“家庭网络连接”中，选择要直接连接到您的网络的连接。详细信息，请参阅“注意”。 要点 只有在安装两个或多个网卡的情况下，才能启用 ICS。 如果计算机有多个连接到专用 LAN 段的专用连接，那么启用 ICS 之前，应桥接专用连接。有关如何设置“网桥”的信息，请参阅“相关主题”。 当启用 ICS 时，它将自动提供 ICS 主机的专用连接的 IP 地址。 注意 要执行该过程，您必须是本地计算机上 Administrators 组的成员，或者您必须被委派了适当的权限。如果计算机已加入某个域，则 Domain Admins 组的成员可能会执行该过程。详细信息，请参阅默认本地组和默认组。 要打开“网络连接”，请依次单击“开始”、“控制面板”，然后双击“网络连接”。 只有安装了两个或多个可以连接专用网络的适配器时，才存在“家庭网络连接”和“选择一个专用网络连接”下拉框。 有关在家庭或小型办公网络中连接 Internet 时 ICS 自动配置的协议、服务、接口和路由的信息，请参阅“相关主题”。 如果将 ICS 主机连接到 Internet 时遇到困难，那么可使用“修复”从 Internet 服务提供商 (ISP) 那里获得刷新的 IP 地址配置。 如果网络上的计算机无法与其他网络计算机通讯，那么可使用“修复”强制连接，以便从 ICS 主机刷新其 IP 地址配置。 在使用“修复”前，请确保客户机与网络连接，并且 ICS 主机正在运行、已经过配置并且连接到网络和 Internet。 有关如何为 ICS 配置客户端计算机的信息，请参阅“相关主题”。 Windows Server 2003 Web Edition、Windows Server 2003 Datacenter Edition 和基于 Itanium 的版本的 Windows Server 2]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2009-02-05 10:06:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转帖NAT详解-犯罪团伙版]]></title>
		<link>http://blog.pfan.cn/sword2008/40714.html</link>
		<description><![CDATA[nat翻译成中文就是网络地址转换，顾名思义也就是把一个IP地址转换成另一个IP地址，有人问为什么转换，我们就来看看。数据包中的IP头部包含源IP地址，也就是发出这个包的源节点的IP地址，和目的IP地址，也就是这个包最终会被谁收到。举个例子，有一伙犯罪团伙，有三名成员，毒蛇，老虎，老狼，为了作案方便，他们都办了假身份证，毒蛇成了毛虫，老虎成了小白，老狼则办了一张绵羊的身份证。他们在窝点内部，直接用各自的真名来通话，作案的时候，他们对其他人来说，就是毛虫，小白和绵羊，别人称呼他们也是这三个名字。实际中，如果想隐藏自己的真实身份，那么可以人为的把源IP地址改成一个其他的IP地址，对方接受到之后，以为消息就是从这个IP发了的，那么他回应的时候也使用这个地址作为回应消息的目的地址。目的地址处的nat设备，一旦收到这个消息，就把消息中的目的地址替换成发信人的真实ip地址，然后转交给发信人。 nat的出现其实最初是为了解决IP地址不够用的问题的，我们知道，IP地址中有一类私有地址，也就是大家谁都可以用的地址，就类似比如冬冬，娜娜这种名字，大家谁都可以用，但是你如果去办身份证，就不会让你用这个名字。IP地址就2的32次方那么多个，如果再有多余的节点要分配地址，就不够用了。那么就提出用nat类解决。也就是，如果犯罪团伙中有10名匪徒，但是匪头只成功地办了5张假身份证，那么每次只能有5个人拿着假身份证出去作案。剩下5个人只能在窝里呆着。如果剩下的5个人想作案，那么只能等到出去的5个人回来交班。一旦有外界要和匪帮联系，统统用假名字，匪头根据身份证假名字和真名字的对应，然后点匪（点名），让对应的匪徒出去和外界交涉。但是有一天匪头一想，这样太浪费了，得找个机制，让所有人都出动，他冥思苦想之后，出来一种办法：让多个人都用同一个身份证，但是给他们再区分一下，比如绵羊：80和绵羊：8000就不是一个人，找绵羊80的，匪头就告诉A匪，找绵羊8000的，匪头就告诉B匪。这样，终于全部出动了。这样匪头就可以只用一个假身份证，让全体成员出动，呵呵。咱们还是别在这匪徒作案了，一会警察来抓我了呵呵。我们回到现实。目前企业申请一个IP，需要付钱给网通电信这样的垄断霸王，因为负担不起给企业中每个办公室的每台pc都配一个公网IP，也就是internet上每个人都能找到你的IP，通常企业都只申请一个IP，就像刚才说的]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2009-02-03 14:02:00</pubDate>
		</item>
				<item>
		<title><![CDATA[【转】S0/0&nbsp;S0/1口的作用]]></title>
		<link>http://blog.pfan.cn/sword2008/40633.html</link>
		<description><![CDATA[S0/0 S0/1口是用来接64K-2M专线的，它的接口是60针的,需要加一台协议转换器来接到运营商的光端机上；F0/0是外网以太网口 F0/1是内网以太网口；AUX口是用来从远程modem登录管理的，它需要接一个外置的modem，并且还要有一个电话线（能被打进电话）。]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2009-01-21 09:06:00</pubDate>
		</item>
				<item>
		<title><![CDATA[[原]VC串口API超时的详细介绍]]></title>
		<link>http://blog.pfan.cn/sword2008/40153.html</link>
		<description><![CDATA[_BAT_姜维 &nbsp;&nbsp; 发表于2009年01月04日 11:09 阅读(0) 评论(0) 分类： 串口API 权限: 公开 





昨天调了一下API结果发现同步ReadFile居然没堵塞就返回，那同步和异步岂不是一个样了，太阳！线程没错，都没错，所以又拿资料出来看，发现有个超时设置，应该就是他了，嘿嘿。我原本程序：COMMTIMEOUTS TimeOuts;//设定读超时TimeOuts.ReadIntervalTimeout=MAXDWORD;TimeOuts.ReadTotalTimeoutMultiplier=0;TimeOuts.ReadTotalTimeoutConstant=0;//在读一次输入缓冲区的内容后读操作就立即返回，//而不管是否读入了要求的字符。//设定写超时TimeOuts.WriteTotalTimeoutMultiplier=100;TimeOuts.WriteTotalTimeoutConstant=500;SetCommTimeouts(hCom,&amp;TimeOuts); //设置超时我留意了一下，它所说的超时是指串口读写操作超时而总超时就是函数返回的标准，如果操作在总超时之前没完成，那么就结束了本次操作，如果在总超时之前完成了，那马上返回，官方资料:COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是：总超时＝时间系数×要求读/写的字符数＋时间常量 例如，要读入10个字符，那么读操作的总超时的计算公式为：读总超时＝ReadTotalTimeoutMultiplier×10＋ReadTotalTimeoutConstant 要注意到无论读或者写，都有个要求的数目和实际读到的数目引用ReadFile(hCom,str,wCount,&amp;wCount,NULL);wCount要求读入的数目，&amp;wCount读到的数目引用总超时＝WriteTotalTimeoutMultiplier×wCount＋ReadTotalTimeoutConstant而异步虽然是靠事件，但是其内部一定是另起了一个线程。OK，超时介绍到此]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2009-01-04 11:23:00</pubDate>
		</item>
				<item>
		<title><![CDATA[vc&nbsp;程序打包]]></title>
		<link>http://blog.pfan.cn/sword2008/40043.html</link>
		<description><![CDATA[installshield wise isntall setupfactory nsis 都可以满足你]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-12-24 09:19:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转C#&nbsp;SerialPort运行方式]]></title>
		<link>http://blog.pfan.cn/sword2008/38219.html</link>
		<description><![CDATA[C# SerialPort运行方式 SerialPort中串口数据的读取与写入有较大的不同。由于串口不知道数据何时到达，因此有两种方法可以实现串口数据的读取。一、线程实时读串口；二、事件触发方式实现。由于线程实时读串口的效率不是十分高效，因此比较好的方法是事件触发的方式。在SerialPort类中有DataReceived事件，当串口的读缓存有数据到达时则触发DataReceived事件，其中SerialPort.ReceivedBytesThreshold属性决定了当串口读缓存中数据多少个时才触发DataReceived事件，默认为1。另外，SerialPort.DataReceived事件运行比较特殊，其运行在辅线程，不能与主线程中的显示数据控件直接进行数据传输，必须用间接的方式实现。如下：SerialPort&nbsp;spSend;&nbsp;&nbsp;//spSend,spReceive用虚拟串口连接，它们之间可以相互传输数据。spSend发送数据SerialPort&nbsp;spReceive;&nbsp;&nbsp;//spReceive接受数据TextBox&nbsp;txtSend;&nbsp;&nbsp;//发送区TextBox&nbsp;txtReceive;&nbsp;&nbsp;//接受区Button&nbsp;btnSend;&nbsp;&nbsp;//数据发送按钮delegate&nbsp;void&nbsp;HandleInterfaceUpdateDelegate(string&nbsp;text);&nbsp;&nbsp;//委托，此为重点HandleInterfaceUpdateDelegate&nbsp;interfaceUpdateHandle;public&nbsp;void&nbsp;InitClient()&nbsp;&nbsp;//窗体控件已在初始化{&nbsp;&nbsp;interfaceUpdateHandle&nbsp;=&nbsp;new&nbsp;HandleInterfaceUpdateDelegate(UpdateTextBox);&nbsp;&nbsp;//实例化委托对象&nbsp;&nbsp;spSend.Open();&nbsp;&nbsp;//SerialPort对象在程序结束前必须关闭，]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-09-11 21:53:00</pubDate>
		</item>
				<item>
		<title><![CDATA[[转载]C#中串口通信编程]]></title>
		<link>http://blog.pfan.cn/sword2008/38218.html</link>
		<description><![CDATA[原文及源代码位置:http://bbs.msproject.cn/default.aspx?g=posts&amp;t=333原文作者：ivanx转载自：http://bbs.msproject.cn/[翻译]Tapan Dantre.著Serial Communication using C# and Whidbey[简介]本文将介绍如何在.NET平台下使用C#创建串口通信程序，.NET 2.0提供了串口通信的功能，其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口，还可以和串口设备进行通信。我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下，而且我们不打算使用任何的握手或流控制器，而是使用无modem连接。命名空间System.IO.Ports命名空间中最重用的是SerialPort 类。创建SerialPort 对象通过创建SerialPort 对象，我们可以在程序中控制串口通信的全过程。我们将要用到的SerialPort 类的方法：ReadLine()：从输入缓冲区读一新行的值，如果没有，会返回NULLWriteLine(string)：写入输出缓冲Open()：打开一个新的串口连接Close()：关闭 
Code: 
//create a Serial Port objectSerialPort sp = new SerialPort ();
默认情况下，DataBits 值是8，StopBits 是1，通信端口是COM1。这些都可以在下面的属性中重新设置：BaudRate：串口的波特率StopBits：每个字节的停止位数量ReadTimeout：当读操作没有完成时的停止时间。单位，毫秒还有不少其它公共属性，自己查阅MSDN。串口的硬件知识在数据传输的时候，每个字节的数据通过单个的电缆线传输。包包括开始位，数据，结束为。一旦开始位传出，后面就会传数据，可能是5，6，7或8位，就看你的设定了。发送和接收必须设定同样的波特率和数据位数。无猫模式没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR &amp; DSR, 和 RTS &amp; CTS也需要交叉。RS232针图这里，我们三条线。互连2和3（一段的2pin连接3pin），连接两端的5pin。[示例程序]主程序如果想使用默认属性，按“S]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-09-11 20:59:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转socket非阻塞模型]]></title>
		<link>http://blog.pfan.cn/sword2008/37837.html</link>
		<description><![CDATA[1、select 模型int select(int nfds,&nbsp;&nbsp;&nbsp; //忽略，兼容Berkeley套接字fd_set* readfds,&nbsp;&nbsp; //可读套接字集合fd_set* writefds,&nbsp;&nbsp; //可写套接字集合fd_set* exceptfds,&nbsp;&nbsp; //指向套接字集合，检查错误const struct timeval* timeout //超时时间，NULL为无限等待);typedef struct fd_set {u_int fd_count;&nbsp;&nbsp;&nbsp; //数组大小SOCKET fd_array[FD_SETSIZE]; //socket数组}
预定义的4个操作fd_set的常用宏：FD_ZERO(*set） 初始化set为空，清空集合FD_CLR(s,*set) 从set移除sFD_ISSET(s,*set)检查s是否在set中，true－存在FD_SET(s,*set) 添加s到set中
评价:单线程可以处理多个socket，但是需要不断进行对select返回的结果进行检查，性能不高2、WSAAsyncSelect 模型异步Windows消息通知模型
非阻塞同步模型，先产生windows消息，然后进行操作，操作不完成不返回int WSAAsyncselect(SOCKET s,&nbsp;&nbsp;&nbsp; //socket句柄HWND hWnd,&nbsp;&nbsp;&nbsp; //指定接受消息的窗口句柄u_int wMsg,&nbsp;&nbsp;&nbsp; //指定网络事件来到时接受到的消息IDlong lEvent&nbsp;&nbsp;&nbsp; //指定哪些网络事件需要通知);lEvent可以取以下值的组合:FD_READ&nbsp;&nbsp; 缓冲区有数据,可读FD_WRITE 缓冲区变空,可写FD_ACCEPT 有连接接入FD_CONNECT 连接完成FD_CLOSE socket连接关闭
LRESULT CALLBACK WindowProc(HWND hWnd,WPARAM wParam,LPARAM lParam);wParam - socket 句柄lParam - 高位错误代码,低位]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-24 11:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转socket编程——技术实现]]></title>
		<link>http://blog.pfan.cn/sword2008/37824.html</link>
		<description><![CDATA[socket 实现
这几天都在玩socket了，有一点心得，贴出来与大家共赏，若有不妥或错误的地方，还请各位看官指点一二。
什么是socket？socket就是...，我在这里就不抄书了，有兴趣的同仁去查查书吧。不过还要说一句，socket就是不同进程之间的一种通信方式。就象打电话是朋友之间的一种通信方式是一样。个人理解：所谓“通信”，就是相互之间发送数据。有人理解socket是不同计算机之间的一种通信方式，这是不确切的。两个进程，不管是运行在同一台计算机上，还是运行在不同计算机上，都可通过socket技术进行通信。
socket套接字的使用需要有网卡的支持，所以socket一般都被用来在不同机器之间通信，而如果在同一台计算机上的两个进程进行通信，通常采用效率更高的共享内存技术来实现。
两个进程之间进行通讯，就需要两个进程同时都在运行了（废话），在具体实现中，两个进程我们通常要区别对待，一个进程专门等待另一个进程给自己发消息，收到消息后进行处理，在把处理结果发送回去。我们把专门处理消息、提供服务的进程称为服务器端，把发送消息、请求处理的进程称为客户端。总体过程就是客户端发送一个消息给服务器端，服务器端进程收到消息进行处理，把处理结果发送给客户端。恩，就是这样。
还有一个问题，如果我现在有一个进程要跟另一台计算机上的某个进程进行socket通信，那在我这个进程中如何指定另一个进程呢？这里还需要说一下另一个概念——端口，如果把操作系统比作一座房子的话，那端口就是房子的窗口，是系统外界同系统内部进行通信的通道。在socket实现中，我们不进行另一个进程的指定，而是指定发送消息或接收消息的端口号。比如说现在进程A要给进程B发消息，我们会把消息发送到进程B所运行的计算机的端口N上，而进程B此时正在监视端口N，这样进程B就能收到进程A发送来的数据，同样进程B也把消息发送到该端口上，进程A也能从该端口收到进程B发送来的数据，当然，这需要客户端和服务器端关于端口号进行一个约定，即共同操作同一个端口。如果客户端把消息发送到端口N1上，而服务器端监视的是端口N2，那通信一定不能成功。端口号最大为65535，不能比这个再大了，但在我们自己的程序中尽量不要用小于1024的端口号，小于1024的端口好很多都被系统使用了，比如23被telnet所使用。
socket的实现是很简单的]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-23 21:20:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转vc中socket编程步骤]]></title>
		<link>http://blog.pfan.cn/sword2008/37815.html</link>
		<description><![CDATA[vc中socket编程步骤
2008-06-08 11:19





[转]vc中socket编程步骤&nbsp;&nbsp;&nbsp; sockets（套接字）编程有三种，流式套接字（SOCK_STREAM），数据报套接字（SOCK_DGRAM），原始套接字（SOCK_RAW）；基于TCP的socket编程是采用的流式套接字。在这个程序中，将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。服务器端编程的步骤：1：加载套接字库，创建套接字(WSAStartup()/socket())；2：绑定套接字到一个IP地址和一个端口上(bind())；3：将套接字设置为监听模式等待连接请求(listen())；4：请求到来后，接受连接请求，返回一个新的对应于此次连接的套接字(accept())；5：用返回的套接字和客户端进行通信(send()/recv())；6：返回，等待另一连接请求；7：关闭套接字，关闭加载的套接字库(closesocket()/WSACleanup())。服务器端代码如下：
#include &lt;stdio.h&gt;#include &lt;Winsock2.h&gt;void main(){ WORD wVersionRequested; WSADATA wsaData; int err;  wVersionRequested = MAKEWORD( 1, 1 );  err = WSAStartup( wVersionRequested, &amp;wsaData ); if ( err != 0 ) {&nbsp;&nbsp;return; }  if ( LOBYTE( wsaData.wVersion ) != 1 ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HIBYTE( wsaData.wVersion ) != 1 ) {&nbsp;&nbsp; WSACleanup( );&nbsp;&nbsp;return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-23 17:33:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转&nbsp;定义函数数组[C/C++]]]></title>
		<link>http://blog.pfan.cn/sword2008/37814.html</link>
		<description><![CDATA[//&nbsp;函数定义void&nbsp;fun1()&nbsp;{&nbsp;printf("function&nbsp;1 ");&nbsp;}void&nbsp;fun2()&nbsp;{&nbsp;printf("function&nbsp;2 ");&nbsp;}void&nbsp;fun3()&nbsp;{&nbsp;printf("function&nbsp;3 ");&nbsp;}void&nbsp;fun4()&nbsp;{&nbsp;printf("function&nbsp;4 ");&nbsp;}//&nbsp;方法1//&nbsp;函数数组定义并赋初值void&nbsp;(*p[])()&nbsp;=&nbsp;{&nbsp;fun1,&nbsp;fun2,&nbsp;fun3,&nbsp;fun4&nbsp;};//&nbsp;调用数组中的函数for(int&nbsp;i=0;&nbsp;i&nbsp;&lt;&nbsp;4;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;p[i]();}//&nbsp;方法2typedef&nbsp;void&nbsp;(*PFUN)();&nbsp;&nbsp;//&nbsp;定义函数指针PFUNC&nbsp;funArray[]&nbsp;=&nbsp;{&nbsp;fun1,&nbsp;fun2,&nbsp;fun3,&nbsp;fun4&nbsp;};//&nbsp;调用数组中的函数for(int&nbsp;i=0;&nbsp;i&nbsp;&lt;&nbsp;4;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;funArray[i]();}
&nbsp;
http://blog.csdn.net/mynamelj/archive/2007/10/06/1813043.aspx]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-23 16:46:00</pubDate>
		</item>
				<item>
		<title><![CDATA[转利用MFC的Csocket类实现网络通信]]></title>
		<link>http://blog.pfan.cn/sword2008/37727.html</link>
		<description><![CDATA[近年来，利用Internet进行网际间通讯,在WWW浏 览、FTP、Gopher这些常规服务，以及在网络电话、多媒体会议等这些对实时性要求严格 的应用中成为研究的热点，而且已经是必需的了。Windows环境下进行通讯程序设计的最基本方法是应用Windows Sockets实现进程间的通讯，为此微软提供了大量基于Windows Sockets的通讯API，如WinSockAPI、WinInetAPI和ISAPI，并一直致力于开发更快、 更容易的通讯API，将其和MFC集成在一起以使通讯编程越来越容易。本实例重点介绍使用MFC的CSocket类编写网络通讯程序的方法，并通过使用CSocket类实现了网络聊天程序。程序编译运行后的界面效果如图一所示：




图一、网络聊天程序界面效果图　　一、实现方法　　微软的MFC把复杂的WinSock API函数封装到类里，这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API，为高级网络程序员 提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设，目的是为了在MFC中使用WinSock，程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了给程序员提供更方便的接口以自动处理这些任务，MFC给出 了CSocket类，这个类是由CAsyncSocket类继承下来的，它提供了比CAsyncSocket更高层的WinSock API接口。Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据，这使管理数据收发更加便利。CSocket对象提供阻塞模式，这对于Carchive的同步操作是至关重要的。阻塞函数（如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept()）直到操作完成后才返回控制权，因此如果需要低层控制和高效率，就使用CasyncSock类；如果需要方便，则可使用Csocket类。 　　一些网络应用程序(如网络电话、多媒体会议工具)对实时性要求非常强，要求能够直接应用WinSock发送和接收数据。为了充分利用MFC 的优势，首选方案应当是MFC中的CAsyncSocket类或CSocket类，这两个类完全封装了WinSock API，并提供更多的便利。本实例介绍应]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-20 21:21:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VC怪异之处]]></title>
		<link>http://blog.pfan.cn/sword2008/37543.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
				 
				 一直觉得C++ 不用像C那样把变量都写在程序的开始而感觉很高兴。而且有很多资料书上也说，C++中的局部变量也可以写到循环体内,如for(int i = 0 ;i&lt;Max;i++)&nbsp;&nbsp; //&nbsp; 循环结束变量i 自动消失，这很爽啊。{}所以可以写出这样的程序。for(int i = 0 ;i&lt;Max;i++){}for(int i = 0 ;i&lt;Max;i++){}&nbsp;&nbsp; // 上面的循环的 i&nbsp; 不会影响到本次循环的 i&nbsp; 可实际上在VC6 ，和VC.NET&nbsp; 中这样的程序是通不过的。&nbsp;&nbsp; 看个例子：void CWorkLxDlg::OnLocal() {&nbsp;for(int i = 0;i&lt;10 ;i++)&nbsp;{&nbsp; int k = 5;&nbsp;}&nbsp;int m = 0;&nbsp;for(int j = 0 ;j &lt;10;j++)&nbsp;{&nbsp; m = 5; &nbsp;}&nbsp;int p = i ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 此时 i 仍然没有消失。仍然有效&nbsp;&nbsp;&nbsp; }0012F588&nbsp; 0A 00 00 00&nbsp; ....&nbsp; 0A就是变量 p 在内存中的值0012F58C&nbsp; 0A 00 00 00&nbsp; ....0012F590&nbsp; 05 00 00 00&nbsp; ....0012F594&nbsp; 05 00 00 00&nbsp; ....0012F598&nbsp;]]></description>
		<author><![CDATA[qq14923349]]></author>
		<pubDate>2008-08-13 00:19:00</pubDate>
		</item>
		</channel>
</rss>