<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Laien&#039;s</title>
	<atom:link href="http://i.isclab.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://i.isclab.org</link>
	<description>成功 自在 健康 好状态</description>
	<lastBuildDate>Tue, 18 May 2010 07:10:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>【原创】网络视频轻松下载（支持Windows7）</title>
		<link>http://i.isclab.org/?p=110</link>
		<comments>http://i.isclab.org/?p=110#comments</comments>
		<pubDate>Sun, 16 May 2010 15:37:04 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[OS & Software]]></category>
		<category><![CDATA[网络嗅探]]></category>
		<category><![CDATA[视频下载]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=110</guid>
		<description><![CDATA[目的：提供下载土豆、ku6、6间房、CCTV、优酷等网站视频的方法；顺便宣传一下软件（刘飞可要感谢我啊!）。
工具：影音嗅探专家 V2010.02版（支持Windows7）
流程：安装嗅探软件-&#62;配置和启动软件-&#62;访问视频网页-&#62;嗅探视频地址-&#62;下载视频文件
注意：可以单击文内图片查看清晰版
 步骤：
1、下载运行影音嗅探专家
访问地址：http://www.liufei.com/，进入下载页面下载最新版。

2、安装影音嗅探专家
双击程序安装文件，选择【同意条款】；

单击【下一步】，安装程序组件；

继续【下一步】，完成安装。注意，过程中会提示安装flashget，请根据需要自行选择。

3、配置和启动软件
双击桌面快捷方式，启动影音嗅探专家；

单击菜单栏【设置】&#124;【选择网卡】。注意，此处应选择您当前上网正在使用的网卡。应首选有数据包并且IP地址正确的那块网卡。如果你不确定，可以多试几次^_^，完成设置后，单击【确定】按钮。

如果对嗅探的文件有要求，还可以手工设置文件类型。软件默认嗅探常见的视频、音频和flash文件，如mp3、wma、wmv、flv、swf、mp4等。对于土豆、ku6、youku等网站视频，此处无需设置。完成后，单击【确定】按钮。

 4、启动嗅探软件并访问网页
单击工具栏【开始嗅探】按钮，然后在浏览器上打开含有视频、音频文件的网页；

5、嗅探获取视频地址并下载文件
播放视频后，进入影音嗅探专家主界面。黄色背景的记录就是软件嗅探到的真实视频地址。
 鼠标右键即可下载视频文件，或者复制文件地址用迅雷等软件去下载。

]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0017.png"></a>目的</strong>：提供下载土豆、ku6、6间房、CCTV、优酷等网站视频的方法；顺便宣传一下软件（刘飞可要感谢我啊!）。</p>
<p><strong>工具</strong>：影音嗅探专家 V2010.02版（支持Windows7）</p>
<p><strong>流程</strong>：安装嗅探软件-&gt;配置和启动软件-&gt;访问视频网页-&gt;嗅探视频地址-&gt;下载视频文件</p>
<p><strong>注意</strong>：可以单击文内图片查看清晰版</p>
<p> <strong>步骤</strong>：</p>
<p><strong>1、下载运行影音嗅探专家</strong></p>
<p>访问地址：<a href="http://www.liufei.com/">http://www.liufei.com/</a>，进入下载页面下载最新版。<br />
<span id="more-110"></span><br />
<strong>2、安装影音嗅探专家</strong></p>
<p>双击程序安装文件，选择【同意条款】；</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0001.png"><img class="alignnone size-medium wp-image-111" title="安装影音嗅探专家" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0001-300x234.png" alt="" width="300" height="234"  /></a></p>
<p>单击【下一步】，安装程序组件；</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0003.png"><img class="alignnone size-medium wp-image-112" title="安装程序辅助模块" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0003-300x234.png" alt="" width="300" height="234" /></a></p>
<p>继续【下一步】，完成安装。注意，过程中会提示安装flashget，请根据需要自行选择。</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0006.png"><img class="alignnone size-medium wp-image-113" title="成功安装影音嗅探专家" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0006-300x234.png" alt="" width="300" height="234" /></a></p>
<p><strong>3、配置和启动软件</strong></p>
<p>双击桌面快捷方式，启动影音嗅探专家；</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0008.png"><img class="alignnone size-medium wp-image-114" title="影音嗅探专家" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0008-300x223.png" alt="" width="300" height="223" /></a></p>
<p>单击菜单栏【设置】|【选择网卡】。注意，此处应选择您当前上网正在使用的网卡。应首选有数据包并且IP地址正确的那块网卡。如果你不确定，可以多试几次^_^，完成设置后，单击【确定】按钮。</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0009.png"><img class="alignnone size-medium wp-image-115" title="影音嗅探专家-网卡设置" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0009-300x223.png" alt="" width="300" height="223" /></a></p>
<p>如果对嗅探的文件有要求，还可以手工设置文件类型。软件默认嗅探常见的视频、音频和flash文件，如mp3、wma、wmv、flv、swf、mp4等。对于土豆、ku6、youku等网站视频，此处无需设置。完成后，单击【确定】按钮。</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0010.png"><img class="alignnone size-medium wp-image-116" title="影音嗅探专家-设置文件嗅探类型" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0010-300x223.png" alt="" width="300" height="223" /></a></p>
<p><strong> 4、启动嗅探软件并访问网页</strong></p>
<p>单击工具栏【开始嗅探】按钮，然后在浏览器上打开含有视频、音频文件的网页；</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0013.png"><img class="alignnone size-medium wp-image-117" title="访问视频网站" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0013-300x213.png" alt="" width="300" height="213" /></a></p>
<p><strong>5、嗅探获取视频地址并下载文件</strong></p>
<p>播放视频后，进入影音嗅探专家主界面。黄色背景的记录就是软件嗅探到的真实视频地址。<a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0012.png"><img class="alignnone size-medium wp-image-118" title="影音嗅探专家-成功嗅探出视频地址" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0012-300x223.png" alt="" width="300" height="223" /></a></p>
<p> 鼠标右键即可下载视频文件，或者复制文件地址用迅雷等软件去下载。</p>
<p><strong><a href="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0017.png"><img title="影音嗅探专家-下载视频文件" src="http://i.isclab.org/wp-content/uploads/2010/05/SNAG-0017-300x223.png" alt="" width="300" height="223" /></a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=110</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】PHP飞信发送类的修正（感谢jjchibin）</title>
		<link>http://i.isclab.org/?p=101</link>
		<comments>http://i.isclab.org/?p=101#comments</comments>
		<pubDate>Wed, 03 Mar 2010 14:47:07 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP飞信类]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=101</guid>
		<description><![CDATA[　　由于我测试验证不严谨，导致上次发布的PHP飞信短信发送类只能给自己发短信，无法给其他飞信好友发送短信。向各位表示抱歉，同时我今天修改了这个问题。关键是两个步骤：1、登录成功后GetContactList获取用户列表，2、GetContactsInfo获取用户详细信息，建立手机号码和飞信sip的uri之间的映射关系。
　　多的不说了，直接贴代码。经测试程序可以群发，单发，给自己发！
　　点击下载PHP飞信发送类修正版
    

?Download download.txt1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
&#60;?php
/**
 *@desc 飞信短信发送类(Encoded:UTF-8)
 *使用方法：
 * * $myNewFetion = new myFetion('1381111111', 'password','SELF', '测试消息' ); // 给自己发
 * $myNewFetion = new myFetion('1381111111', 'password','1382222222', '测试消息' ); // 给一个人发
 * $myNewFetion = new myFetion('1381111111', 'password','1382222222,13833333333,13844444444', '测试消息' ); // 给很多人发
 * $myNewFetion = new myFetion('1381111111', 'password','ALL', '测试消息' ); // 给所有飞信好友发
&#160;
 *非常感谢CSDN论坛ycTIN在MD5加密部分的帮助!
 *本程序未做容错处理,为防止诈骗短信乱发，程序不提供添加好友功能
 *测试URL:http://i.isclab.org/tools/fetion.php
 *
 *程序运行条件：
 [...]]]></description>
			<content:encoded><![CDATA[<p>　　由于我测试验证不严谨，导致上次发布的<a href="http://i.isclab.org/?p=43">PHP飞信短信发送类</a>只能给自己发短信，无法给其他飞信好友发送短信。向各位表示抱歉，同时我今天修改了这个问题。关键是两个步骤：1、登录成功后GetContactList获取用户列表，2、GetContactsInfo获取用户详细信息，建立手机号码和飞信sip的uri之间的映射关系。<br />
　　多的不说了，直接贴代码。经测试程序可以群发，单发，给自己发！<br />
　　<a href='http://i.isclab.org/wp-content/uploads/2010/03/class.myfetionV3.zip'>点击下载PHP飞信发送类修正版</a><br />
    <span id="more-101"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://i.isclab.org/wp-content/plugins/wp-codebox/wp-codebox.php?p=101&amp;download=download.txt">download.txt</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1012"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
</pre></td><td class="code" id="p101code2"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&lt;?</span>php
<span style="color: #008080; font-style: italic;">/**
 *@desc 飞信短信发送类(Encoded:UTF-8)
 *使用方法：
 * * $myNewFetion = new myFetion('1381111111', 'password','SELF', '测试消息' ); // 给自己发
 * $myNewFetion = new myFetion('1381111111', 'password','1382222222', '测试消息' ); // 给一个人发
 * $myNewFetion = new myFetion('1381111111', 'password','1382222222,13833333333,13844444444', '测试消息' ); // 给很多人发
 * $myNewFetion = new myFetion('1381111111', 'password','ALL', '测试消息' ); // 给所有飞信好友发
&nbsp;
 *非常感谢CSDN论坛ycTIN在MD5加密部分的帮助!
 *本程序未做容错处理,为防止诈骗短信乱发，程序不提供添加好友功能
 *测试URL:http://i.isclab.org/tools/fetion.php
 *
 *程序运行条件：
 *1.服务器能够访问飞信服务器nav.fetion.com.cn的443端口（https）
 *2.服务器端PHP程序能够创建socket访问221.176.31.4的8080端口
 *
 *关键技术：
 *1.CURL + SSL通讯
 *2.PHP Socket编程
 *3.PHP MD5函数的深入理解
 *4.PHP DOM处理XML
 *
 *@author shadu AT foxmail DOT com /CNOS(http://bbs.ouropen.org)
 *@version 2010-03-04
 *@copyright 任意拷贝和修改！
 *@update 修正了只能给自己发短信的bug，感谢jjchibin的提醒
 *@update 增加了群发功能
 **/</span>
<span style="color: #6666cc; font-weight: bold;">class</span> myFetion<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $mobile_no   <span style="color: #008000;">=</span> <span style="color: #666666;">'1381111111'</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 发送者手机号</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $fetion_no   <span style="color: #008000;">=</span> <span style="color: #666666;">'738713940'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 发送者飞信号，程序自动获取</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $fetion_uri  <span style="color: #008000;">=</span> <span style="color: #666666;">'sip:123456789@fetion.com.cn;p=1234'</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 发送者的sip</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $fetion_pwd  <span style="color: #008000;">=</span> <span style="color: #666666;">'mypassword'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 发送者飞信登录密码</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $cookie_file <span style="color: #008000;">=</span> <span style="color: #666666;">'cookie.txt'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 临时存放的cookie文件</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> $SMS_RECEIVER <span style="color: #008000;">=</span> <span style="color: #666666;">'1382222222'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//  短信接收者手机号码 </span>
    <span style="color: #0600FF; font-weight: bold;">public</span> $SMS_TEXT      <span style="color: #008000;">=</span> <span style="color: #666666;">'sms test'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 短信内容，支持中文</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> $fetion_ContactList <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span> <span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $fetion_ContactMapping <span style="color: #008000;">=</span> array<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> $NONCE       <span style="color: #008000;">=</span> <span style="color: #666666;">'AAB3238922BCC25A6F606EB525FFDC56'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// SIPC服务器返回,每次不同</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $C_NONCE     <span style="color: #008000;">=</span> <span style="color: #666666;">'AAB3238922BCC25A6F606EB525FFDC56'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 是随机的，但是固定值也没关系</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $SSIC        <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// cookie中提取的变量</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $RESPONSE   <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 加密后的密钥串</span>
&nbsp;
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> $url_nav            <span style="color: #008000;">=</span> <span style="color: #666666;">'https://nav.fetion.com.cn/nav/getsystemconfig.aspx'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 443端口获取导航信息</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $domain_fetion      <span style="color: #008000;">=</span> <span style="color: #666666;">'fetion.com.cn'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 飞信服务器的域名</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> $SIPC_PROXY         <span style="color: #008000;">=</span> <span style="color: #666666;">'221.176.31.4:8080'</span><span style="color: #008000;">;</span>  <span style="color: #008080; font-style: italic;">//  8080端口飞信通讯使用 </span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $SSI_PROXY_SIGN_IN  <span style="color: #008000;">=</span> <span style="color: #666666;">'https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 登录URL</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $SSI_PROXY_SIGH_OUT <span style="color: #008000;">=</span> <span style="color: #666666;">'http://ssi.fetion.com.cn/ssiportal/SSIAppSignOut.aspx'</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 登出URL</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> $curl <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">NULL</span> <span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $socket <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">NULL</span> <span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *从导航网站获取信息
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_CONFIG <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;config&gt;&lt;user mobile-no=<span style="color: #008080; font-weight: bold;">\&quot;</span>%s<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;client type=<span style="color: #008080; font-weight: bold;">\&quot;</span>PC<span style="color: #008080; font-weight: bold;">\&quot;</span> version=<span style="color: #008080; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #008080; font-weight: bold;">\&quot;</span> platform=<span style="color: #008080; font-weight: bold;">\&quot;</span>W5.1<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;servers version=<span style="color: #008080; font-weight: bold;">\&quot;</span>0<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;service-no version=<span style="color: #008080; font-weight: bold;">\&quot;</span>12<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;parameters version=<span style="color: #008080; font-weight: bold;">\&quot;</span>15<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;hints version=<span style="color: #008080; font-weight: bold;">\&quot;</span>13<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;http-applications version=<span style="color: #008080; font-weight: bold;">\&quot;</span>14<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;client-config version=<span style="color: #008080; font-weight: bold;">\&quot;</span>17<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;/config&gt;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *使用手机号码和密码向服务器获取对应的飞信号码信息
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SSI_SIGN  <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;mobileno=%s&amp;pwd=%s&quot;</span> <span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *使用飞信号码向SIPC服务器注册，获取临时变量NONCE和SSIC的值
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_SIGN_NONCE      <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;R %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 1<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 1 R<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>L: %d<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>%s&quot;</span> <span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_SIGN_NONCE_BODY <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;args&gt;&lt;device type=<span style="color: #008080; font-weight: bold;">\&quot;</span>PC<span style="color: #008080; font-weight: bold;">\&quot;</span> version=<span style="color: #008080; font-weight: bold;">\&quot;</span>6<span style="color: #008080; font-weight: bold;">\&quot;</span> client-version=<span style="color: #008080; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;caps value=<span style="color: #008080; font-weight: bold;">\&quot;</span>simple-im;im-session;temp-group<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;events value=<span style="color: #008080; font-weight: bold;">\&quot;</span>contact;permission;system-message<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;user-info attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>all<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;presence&gt;&lt;basic value=<span style="color: #008080; font-weight: bold;">\&quot;</span>400<span style="color: #008080; font-weight: bold;">\&quot;</span> desc=<span style="color: #008080; font-weight: bold;">\&quot;</span><span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;/presence&gt;&lt;/args&gt;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *使用飞信号码和加密的密码登录飞信SIPC服务器
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_LOGIN           <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;R %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 1<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 2 R<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>A: Digest response=<span style="color: #008080; font-weight: bold;">\&quot;</span>%s<span style="color: #008080; font-weight: bold;">\&quot;</span>,cnonce=<span style="color: #008080; font-weight: bold;">\&quot;</span>%s<span style="color: #008080; font-weight: bold;">\&quot;</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>L: %d<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>%s&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_LOGIN_BODY      <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;args&gt;&lt;device type=<span style="color: #008080; font-weight: bold;">\&quot;</span>PC<span style="color: #008080; font-weight: bold;">\&quot;</span> version=<span style="color: #008080; font-weight: bold;">\&quot;</span>6<span style="color: #008080; font-weight: bold;">\&quot;</span> client-version=<span style="color: #008080; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;caps value=<span style="color: #008080; font-weight: bold;">\&quot;</span>simple-im;im-session;temp-group<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;events value=<span style="color: #008080; font-weight: bold;">\&quot;</span>contact;permission;system-message<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;user-info attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>all<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;presence&gt;&lt;basic value=<span style="color: #008080; font-weight: bold;">\&quot;</span>400<span style="color: #008080; font-weight: bold;">\&quot;</span> desc=<span style="color: #008080; font-weight: bold;">\&quot;</span><span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;/presence&gt;&lt;/args&gt;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     * 发短信
     */</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_SENDSMS         <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;M %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 2<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 1 M<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>T: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>N: SendSMS<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>L: %d<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>%s&quot;</span><span style="color: #008000;">;</span>
	<span style="color: #008080; font-style: italic;">/**
	 * 退出
	 **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_LOGOUT          <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;R %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 1 <span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 3 R<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>X: 0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
	 * 获取好友列表
	 **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_GetContactList      <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;S %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 3<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 1 S<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>N: GetContactList<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>L: %d<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>%s&quot;</span> <span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUEST_SIPC_GetContactListBody <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;args&gt;&lt;contacts&gt;&lt;buddy-lists /&gt;&lt;buddies attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>all<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;mobile-buddies attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>all<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&lt;chat-friends /&gt;&lt;blacklist /&gt;&lt;/contacts&gt;&lt;/args&gt;&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     * 获取好友信息
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUESR_SIPC_GetContactsInfo        <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;S %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 9<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 1 S<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>N: GetContactsInfo<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>L: %d<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>%s&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> $REQUESR_SIPC_GetContactsInfo_body  <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;args&gt;&lt;contacts attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>provisioning;impresa;mobile-no;nickname;name;gender;portrait-crc;ivr-enabled<span style="color: #008080; font-weight: bold;">\&quot;</span> extended-attributes=<span style="color: #008080; font-weight: bold;">\&quot;</span>score-level<span style="color: #008080; font-weight: bold;">\&quot;</span>&gt;%s&lt;/contacts&gt;&lt;/args&gt;&quot;</span> <span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *@param $sender 短信发送者手机号
     *@param $passwd 短信发送者密码
     *@param $receiver 短信接收者手机号
     *@param $msg 短信内容
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> function __construct<span style="color: #008000;">&#40;</span>$sender, $passwd, $receiver, $msg<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        $this<span style="color: #008000;">-&gt;</span>mobile_no    <span style="color: #008000;">=</span> $sender <span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>fetion_pwd   <span style="color: #008000;">=</span> $passwd<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>SMS_RECEIVER <span style="color: #008000;">=</span> $receiver<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>SMS_TEXT     <span style="color: #008000;">=</span> $msg<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>cookie_file  <span style="color: #008000;">=</span> $this<span style="color: #008000;">-&gt;</span>mobile_no <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>cookie_file <span style="color: #008000;">;</span>
&nbsp;
		$this<span style="color: #008000;">-&gt;</span>FetionStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008080; font-style: italic;">/**
	 * 开始Fetion短信发送处理流程
	 *
	 */</span>
	<span style="color: #0600FF; font-weight: bold;">private</span> function FetionStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
		$this<span style="color: #008000;">-&gt;</span>FetionGetConfig<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 从导航网站443端口获取登录信息</span>
		<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>FetionSocektInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080; font-style: italic;">// 初始化到SIPC的8080端口socket连接</span>
		<span style="color: #008000;">&#123;</span>
			$this<span style="color: #008000;">-&gt;</span>FetionGetSIPCNonce<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 向服务器注册飞信号，获取关键变量值</span>
			<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>FetionLogin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>    <span style="color: #008080; font-style: italic;">// 发送登录认证命令</span>
				<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>$this<span style="color: #008000;">-&gt;</span>FetionGetContactLists<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// 取飞信用户列表</span>
					$this<span style="color: #008000;">-&gt;</span>SMS_RECEIVER <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;SELF&quot;</span><span style="color: #008000;">;</span>
				<span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span> 
				$this<span style="color: #008000;">-&gt;</span>FetionGetContactsInfo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 建立电话号码到飞信号码的映射</span>
				<span style="color: #008080; font-style: italic;">//$this-&gt;FetionSendSMS(); // 发短信!</span>
				<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ALL&quot;</span> <span style="color: #008000;">==</span> $this<span style="color: #008000;">-&gt;</span>SMS_RECEIVER<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>  <span style="color: #008080; font-style: italic;">// 给飞信上所有好友发</span>
					<span style="color: #0600FF; font-weight: bold;">foreach</span><span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>fetion_ContactMapping <span style="color: #0600FF; font-weight: bold;">as</span> $sip<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
						$this<span style="color: #008000;">-&gt;</span>FetionSendSMS<span style="color: #008000;">&#40;</span>$sip<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #008000;">&#125;</span>
				elseif<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;SELF&quot;</span> <span style="color: #008000;">==</span> $this<span style="color: #008000;">-&gt;</span>SMS_RECEIVER<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// 给自己发</span>
					$this<span style="color: #008000;">-&gt;</span>FetionSendSMS<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>fetion_uri<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
				<span style="color: #008000;">&#125;</span>
				<span style="color: #0600FF; font-weight: bold;">else</span><span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// 发给指定的手机号集合&quot;13811111111,13822222222,13833333333&quot;</span>
					$mobile_array <span style="color: #008000;">=</span> split<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;,&quot;</span> , $this<span style="color: #008000;">-&gt;</span>SMS_RECEIVER<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
					<span style="color: #0600FF; font-weight: bold;">foreach</span><span style="color: #008000;">&#40;</span>$mobile_array <span style="color: #0600FF; font-weight: bold;">as</span> $mobile<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
						$this<span style="color: #008000;">-&gt;</span>FetionSendSMS<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>fetion_ContactMapping<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;$mobile&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #008000;">&#125;</span>
				$this<span style="color: #008000;">-&gt;</span>FetionLogout<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0600FF; font-weight: bold;">else</span>
			<span style="color: #008000;">&#123;</span>
				echo <span style="color: #666666;">&quot;登录失败<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">else</span>
		<span style="color: #008000;">&#123;</span>
			echo <span style="color: #666666;">&quot;Socket 初始化失败<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *从导航地址获取配置信息
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionGetConfig<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        $this<span style="color: #008000;">-&gt;</span>REQUEST_CONFIG <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_CONFIG,
                                        $this<span style="color: #008000;">-&gt;</span>mobile_no<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>curl <span style="color: #008000;">=</span> curl_init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_URL, $this<span style="color: #008000;">-&gt;</span>url_nav<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_SSL_VERIFYHOST, <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_SSL_VERIFYPEER, <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_COOKIEJAR, $this<span style="color: #008000;">-&gt;</span>cookie_file<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_RETURNTRANSFER, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_POST, <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_POSTFIELDS, $this<span style="color: #008000;">-&gt;</span>REQUEST_CONFIG<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $xml_config <span style="color: #008000;">=</span> curl_exec<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 以下是从导航页面返回的XML里取相关信息</span>
        file_put_contents<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;test3.xml&quot;</span>, $xml_config<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $xmlDom <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DOMDocument<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $xmlDom<span style="color: #008000;">-&gt;</span>loadXML<span style="color: #008000;">&#40;</span>$xml_config<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $fetion_server <span style="color: #008000;">=</span> $xmlDom<span style="color: #008000;">-&gt;</span>getElementsByTagName<span style="color: #008000;">&#40;</span><span style="color: #666666;">'servers'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $fetion_server<span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>getElementsByTagName<span style="color: #008000;">&#40;</span><span style="color: #666666;">'sipc-proxy'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>nodeValue<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>SSI_PROXY_SIGN_IN  <span style="color: #008000;">=</span> $fetion_server<span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>getElementsByTagName<span style="color: #008000;">&#40;</span><span style="color: #666666;">'ssi-app-sign-in'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>nodeValue<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>SSI_PROXY_SIGH_OUT <span style="color: #008000;">=</span> $fetion_server<span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>getElementsByTagName<span style="color: #008000;">&#40;</span><span style="color: #666666;">'ssi-app-sign-out'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>nodeValue<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>SSI_PROXY_SIGN_IN<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 以下获取手机号对应的飞信号</span>
        sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SSI_SIGN, $this<span style="color: #008000;">-&gt;</span>mobile_no, $this<span style="color: #008000;">-&gt;</span>fetion_pwd<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_URL, $this<span style="color: #008000;">-&gt;</span>SSI_PROXY_SIGN_IN<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_setopt<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl, CURLOPT_POSTFIELDS, sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SSI_SIGN, $this<span style="color: #008000;">-&gt;</span>mobile_no, $this<span style="color: #008000;">-&gt;</span>fetion_pwd<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $Result <span style="color: #008000;">=</span> curl_exec<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        curl_close<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>curl<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        file_put_contents<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;test4.xml&quot;</span>, $Result<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $xmlDom<span style="color: #008000;">-&gt;</span>loadXML<span style="color: #008000;">&#40;</span>$Result<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $uri <span style="color: #008000;">=</span> $xmlDom<span style="color: #008000;">-&gt;</span>getElementsByTagName<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;user&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>item<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">-&gt;</span>getAttribute<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;uri&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008080; font-style: italic;">//&quot;sip:738713940@fetion.com.cn;p=5914&quot;</span>
		$this<span style="color: #008000;">-&gt;</span>fetion_uri <span style="color: #008000;">=</span> $uri <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 发送者自己的sip</span>
        <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>preg_match<span style="color: #008000;">&#40;</span><span style="color: #666666;">'/^sip:(<span style="color: #008080; font-weight: bold;">\d</span>+)@(<span style="color: #008080; font-weight: bold;">\S</span>+);.*$/'</span>, $uri, $matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            $this<span style="color: #008000;">-&gt;</span>fetion_no <span style="color: #008000;">=</span> $matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">;</span>
            $this<span style="color: #008000;">-&gt;</span>domain_fetion <span style="color: #008000;">=</span> $matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *初始化Fetion通讯Socket
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionSocektInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
		$this<span style="color: #008000;">-&gt;</span>SIPC_PROXY<span style="color: #008000;">;</span>
        $this<span style="color: #008000;">-&gt;</span>socket <span style="color: #008000;">=</span> socket_create<span style="color: #008000;">&#40;</span>AF_INET, SOCK_STREAM, SOL_TCP<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        list<span style="color: #008000;">&#40;</span>$ip_fetion, $port_fetion<span style="color: #008000;">&#41;</span> <span style="color: #008000;">=</span> split<span style="color: #008000;">&#40;</span><span style="color: #666666;">':'</span>, $this<span style="color: #008000;">-&gt;</span>SIPC_PROXY<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;221.176.31.4:8080&quot;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> socket_connect<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $ip_fetion, $port_fetion<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *注册飞信号码并获取临时变量NONCE和SSIC
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionGetSIPCNonce<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        $REQUEST_SIPC_SIGN_NONCE <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_SIGN_NONCE, $this<span style="color: #008000;">-&gt;</span>domain_fetion,
                                           $this<span style="color: #008000;">-&gt;</span>fetion_no, strlen<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_SIGN_NONCE_BODY<span style="color: #008000;">&#41;</span>,
                                           $this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_SIGN_NONCE_BODY<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $sock_data <span style="color: #008000;">=</span> socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUEST_SIPC_SIGN_NONCE<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $buf <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span>$buf <span style="color: #008000;">=</span> socket_read<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, <span style="color: #FF0000;">10000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            echo <span style="color: #666666;">&quot;Line:&quot;</span> <span style="color: #008000;">.</span> __LINE__ <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;socket_read() failed; reason: &quot;</span> <span style="color: #008000;">.</span> <span style="color: #0000FF;">socket_strerror</span><span style="color: #008000;">&#40;</span>socket_last_error<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        $regex_ssic <span style="color: #008000;">=</span> <span style="color: #666666;">'/.*nonce=<span style="color: #008080; font-weight: bold;">\&quot;</span>(<span style="color: #008080; font-weight: bold;">\\</span>w+)<span style="color: #008080; font-weight: bold;">\&quot;</span>.*/s'</span> <span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>preg_match<span style="color: #008000;">&#40;</span>$regex_ssic, $buf, $matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            echo <span style="color: #666666;">&quot;Fetion Error: No nonce found in socket<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        $this<span style="color: #008000;">-&gt;</span>NONCE <span style="color: #008000;">=</span> strtoupper<span style="color: #008000;">&#40;</span>trim<span style="color: #008000;">&#40;</span>$matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        $regex_ssic <span style="color: #008000;">=</span> <span style="color: #666666;">'/ssic<span style="color: #008080; font-weight: bold;">\s</span>+(.*)/s'</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>preg_match<span style="color: #008000;">&#40;</span>$regex_ssic, file_get_contents<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>cookie_file<span style="color: #008000;">&#41;</span>, $matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            echo <span style="color: #666666;">&quot;Fetion Error: No ssic found in cookie<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
        echo $this<span style="color: #008000;">-&gt;</span>SSIC <span style="color: #008000;">=</span> trim<span style="color: #008000;">&#40;</span>$matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *登录飞信服务器
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionLogin<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        $this<span style="color: #008000;">-&gt;</span>RESPONSE <span style="color: #008000;">=</span> $this<span style="color: #008000;">-&gt;</span>FetionEncryptPassWD<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $REQUEST_SIPC_LOGIN <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_LOGIN,
                                      $this<span style="color: #008000;">-&gt;</span>domain_fetion, $this<span style="color: #008000;">-&gt;</span>fetion_no,
                                      $this<span style="color: #008000;">-&gt;</span>RESPONSE, $this<span style="color: #008000;">-&gt;</span>C_NONCE,
                                      strlen<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_LOGIN_BODY<span style="color: #008000;">&#41;</span>,
                                      $this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_LOGIN_BODY<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $buf <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span>
        $sock_data <span style="color: #008000;">=</span> socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUEST_SIPC_LOGIN<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span>$buf <span style="color: #008000;">=</span> socket_read<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, <span style="color: #FF0000;">10000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            echo <span style="color: #666666;">&quot;Line:&quot;</span> <span style="color: #008000;">.</span> __LINE__ <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;socket_read() failed; reason: &quot;</span> <span style="color: #008000;">.</span> <span style="color: #0000FF;">socket_strerror</span><span style="color: #008000;">&#40;</span>socket_last_error<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
		<span style="color: #008080; font-style: italic;">//echo $buf,&quot;\n&quot;;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>preg_match_all<span style="color: #008000;">&#40;</span><span style="color: #666666;">'/200/s'</span>, $buf, $matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">True</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #0600FF; font-weight: bold;">else</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">False</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008080; font-style: italic;">/**
	 * 获取飞信用户列表
	 * */</span>
	<span style="color: #0600FF; font-weight: bold;">private</span> function FetionGetContactLists<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
		echo $REQUEST_GETCONTACTLISTS <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_GetContactList,
				$this<span style="color: #008000;">-&gt;</span>domain_fetion,
				$this<span style="color: #008000;">-&gt;</span>fetion_no,
				strlen<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_GetContactListBody<span style="color: #008000;">&#41;</span>,
				$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_GetContactListBody<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		$buf <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span>
		$sock_data <span style="color: #008000;">=</span> socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUEST_GETCONTACTLISTS<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span>$buf <span style="color: #008000;">=</span> socket_read<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, <span style="color: #FF0000;">10000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			echo <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>Line:&quot;</span> <span style="color: #008000;">.</span> __LINE__ <span style="color: #008000;">.</span> <span style="color: #666666;">&quot; socket_read() failed; reason: &quot;</span> <span style="color: #008000;">.</span> <span style="color: #0000FF;">socket_strerror</span><span style="color: #008000;">&#40;</span>socket_last_error<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #008080; font-style: italic;">//echo $buf,&quot;\n\n\n&quot;;</span>
		file_put_contents<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ContactList.txt&quot;</span>,$buf<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>preg_match_all<span style="color: #008000;">&#40;</span><span style="color: #666666;">'/(sip:<span style="color: #008080; font-weight: bold;">\\</span>d+@fetion<span style="color: #008080; font-weight: bold;">\.</span>com<span style="color: #008080; font-weight: bold;">\.</span>cn;p=<span style="color: #008080; font-weight: bold;">\\</span>d+)/s'</span>,$buf,$matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
			$fetion_ContactList <span style="color: #008000;">=</span> $matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">foreach</span><span style="color: #008000;">&#40;</span>$fetion_ContactList <span style="color: #0600FF; font-weight: bold;">as</span> $sip<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
				$this<span style="color: #008000;">-&gt;</span>fetion_ContactList <span style="color: #008000;">.=</span> <span style="color: #666666;">&quot;&lt;contact uri=<span style="color: #008080; font-weight: bold;">\&quot;</span>$sip<span style="color: #008080; font-weight: bold;">\&quot;</span> /&gt;&quot;</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008080; font-style: italic;">/**
	 * 获取用户信息，并建立手机号与SIP号映射关系
	 *
	 */</span>
	<span style="color: #0600FF; font-weight: bold;">private</span> function FetionGetContactsInfo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
		$this<span style="color: #008000;">-&gt;</span>REQUESR_SIPC_GetContactsInfo_body <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUESR_SIPC_GetContactsInfo_body, $this<span style="color: #008000;">-&gt;</span>fetion_ContactList<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		$REQUESR_SIPC_GetContactsInfo <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUESR_SIPC_GetContactsInfo,
				$this<span style="color: #008000;">-&gt;</span>domain_fetion,
				$this<span style="color: #008000;">-&gt;</span>fetion_no,
				strlen<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUESR_SIPC_GetContactsInfo_body<span style="color: #008000;">&#41;</span>,
				$this<span style="color: #008000;">-&gt;</span>REQUESR_SIPC_GetContactsInfo_body
				<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		$sock_data <span style="color: #008000;">=</span> socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUESR_SIPC_GetContactsInfo<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span>$buf <span style="color: #008000;">=</span> socket_read<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, <span style="color: #FF0000;">1024</span><span style="color: #008000;">*</span><span style="color: #FF0000;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			echo <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>Line:&quot;</span> <span style="color: #008000;">.</span> __LINE__ <span style="color: #008000;">.</span> <span style="color: #666666;">&quot; socket_read() failed; reason: &quot;</span> <span style="color: #008000;">.</span> <span style="color: #0000FF;">socket_strerror</span><span style="color: #008000;">&#40;</span>socket_last_error<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #008080; font-style: italic;">//echo $buf,&quot;\n\n&quot;;</span>
		file_put_contents<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;GetContactsInfo.txt&quot;</span>,$buf<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>preg_match_all<span style="color: #008000;">&#40;</span><span style="color: #666666;">'/&lt;contact uri=<span style="color: #008080; font-weight: bold;">\&quot;</span>(.*?)<span style="color: #008080; font-weight: bold;">\&quot;</span>.*?mobile<span style="color: #008080; font-weight: bold;">\-</span>no=<span style="color: #008080; font-weight: bold;">\&quot;</span>(.*?)<span style="color: #008080; font-weight: bold;">\&quot;</span>.*?<span style="color: #008080; font-weight: bold;">\/</span>contact&gt;/s'</span>,$buf,$matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
			$total <span style="color: #008000;">=</span> count<span style="color: #008000;">&#40;</span>$matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">for</span><span style="color: #008000;">&#40;</span>$i<span style="color: #008000;">=</span><span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> $i<span style="color: #008000;">&lt;</span>$total<span style="color: #008000;">;</span> $i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
				$uri <span style="color: #008000;">=</span> $matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>$i<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
				$mobile <span style="color: #008000;">=</span> $matches<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>$i<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
				$this<span style="color: #008000;">-&gt;</span>fetion_ContactMapping<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;$mobile&quot;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> $uri <span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;13811111111&quot; =&gt; &quot;sip:912534014@fetion.com.cn;p=9272&quot;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">else</span><span style="color: #008000;">&#123;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
    <span style="color: #008080; font-style: italic;">/**
     *发短信
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> function FetionSendSMS<span style="color: #008000;">&#40;</span>$receiver_sip<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//&quot;M %s SIP-C/2.0\r\nF: %s\r\nI: 2\r\nQ: 1 M\r\nT: tel:%s\r\nN: SendSMS\r\nL: %d\r\n\r\n%s&quot;;</span>
<span style="color: #008080; font-style: italic;">//		$receiver_mobile = $this-&gt;SMS_RECEIVER ;</span>
<span style="color: #008080; font-style: italic;">//		if(!array_key_exists($receiver_mobile,$this-&gt;fetion_ContactMapping)) return false;</span>
<span style="color: #008080; font-style: italic;">//		$receiver_sip = $this-&gt;fetion_ContactMapping[$receiver_mobile] ; // 转换手机号为&quot;sip:1212@fetion.com.cn;p=1212&quot;格式</span>
        $REQUEST_SENDSMS <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_SENDSMS,
                                   $this<span style="color: #008000;">-&gt;</span>domain_fetion, $this<span style="color: #008000;">-&gt;</span>fetion_no,
                                   <span style="color: #008080; font-style: italic;">// &quot;tel:&quot; . $this-&gt;SMS_RECEIVER, // &quot;tel:13822222222&quot; 方式目前已经不支持</span>
				                   $receiver_sip,  
                                   strlen<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>SMS_TEXT<span style="color: #008000;">&#41;</span>,
                                   $this<span style="color: #008000;">-&gt;</span>SMS_TEXT<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        $buf <span style="color: #008000;">=</span> <span style="color: #666666;">''</span> <span style="color: #008000;">;</span>
        $sock_data <span style="color: #008000;">=</span> socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUEST_SENDSMS<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span>$buf <span style="color: #008000;">=</span> socket_read<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, <span style="color: #FF0000;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            echo <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>Line:&quot;</span> <span style="color: #008000;">.</span> __LINE__ <span style="color: #008000;">.</span> <span style="color: #666666;">&quot; socket_read() failed; reason: &quot;</span> <span style="color: #008000;">.</span> <span style="color: #0000FF;">socket_strerror</span><span style="color: #008000;">&#40;</span>socket_last_error<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
		<span style="color: #008080; font-style: italic;">//echo $buf,&quot;\n&quot;;</span>
        <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>preg_match_all<span style="color: #008000;">&#40;</span><span style="color: #666666;">'/200/s'</span>, $buf, $matches<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">True</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #0600FF; font-weight: bold;">else</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">False</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *登出飞信服务器
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionLogout<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//string Logout = String.Format(FETION_SIPC_LOGOUT, FETION_DOMAIN_URL, Fetion_Number);</span>
        $FETION_SIPC_LOGOUT   <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;R %s SIP-C/2.0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>F: %s<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>I: 1 <span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>Q: 3 R<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>X: 0<span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\r</span><span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">;</span>
        $REQUEST_SIPC_LOGOUT <span style="color: #008000;">=</span> sprintf<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>REQUEST_SIPC_LOGOUT,
                                       $this<span style="color: #008000;">-&gt;</span>domain_fetion,
                                       $this<span style="color: #008000;">-&gt;</span>fetion_no<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
        @socket_write<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket, $REQUEST_SIPC_LOGOUT<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        socket_close<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>socket<span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *生成加密串,感谢CSND ycTIN的帮助！
     *@return string 加密的密码串     *
     **/</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">private</span> function FetionEncryptPassWD<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        $key <span style="color: #008000;">=</span> md5<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>fetion_no <span style="color: #008000;">.</span> <span style="color: #666666;">':'</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>domain_fetion <span style="color: #008000;">.</span> <span style="color: #666666;">':'</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>fetion_pwd, <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        $h1 <span style="color: #008000;">=</span> strtoupper<span style="color: #008000;">&#40;</span>md5<span style="color: #008000;">&#40;</span>$key <span style="color: #008000;">.</span> <span style="color: #666666;">':'</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>NONCE <span style="color: #008000;">.</span> <span style="color: #666666;">':'</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>C_NONCE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        $h2 <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;REGISTER:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>fetion_no <span style="color: #008000;">;</span>
        $h2 <span style="color: #008000;">=</span> strtoupper<span style="color: #008000;">&#40;</span>md5<span style="color: #008000;">&#40;</span>$h2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        $response <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;$h1:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>NONCE <span style="color: #008000;">.</span> <span style="color: #666666;">&quot;:&quot;</span> <span style="color: #008000;">.</span> $h2<span style="color: #008000;">;</span>
        $response <span style="color: #008000;">=</span> strtoupper<span style="color: #008000;">&#40;</span>md5<span style="color: #008000;">&#40;</span>$response<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">return</span> $response <span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">/**
     *打印一下临时变量
     **/</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> function printVar<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        print <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>CNONCE:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>C_NONCE<span style="color: #008000;">;</span>
        print <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>Domain:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>domain_fetion<span style="color: #008000;">;</span>
        print <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>NONCE:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>NONCE<span style="color: #008000;">;</span>
        print <span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\n</span>RESPONSE:&quot;</span> <span style="color: #008000;">.</span> $this<span style="color: #008000;">-&gt;</span>RESPONSE<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> function __destruct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//$this-&gt;FetionLogout() ;</span>
        @unlink<span style="color: #008000;">&#40;</span>$this<span style="color: #008000;">-&gt;</span>cookie_file<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 删除cookie文件</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
$myNewFetion <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> myFetion<span style="color: #008000;">&#40;</span><span style="color: #666666;">'13800000000'</span>, <span style="color: #666666;">'abcde12345'</span>, <span style="color: #666666;">'SELF'</span>, <span style="color: #666666;">'给我自己发'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
$myNewFetion <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> myFetion<span style="color: #008000;">&#40;</span><span style="color: #666666;">'13800000000'</span>, <span style="color: #666666;">'abcde12345'</span>, <span style="color: #666666;">'13811111111,13822222222,13833333333'</span>, <span style="color: #666666;">'大家注意了：这是一条PHP飞信短信发送类测试短信。如果你能收到，说明我的群发功能已经实现！收到请回复，Thanks！'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
$myNewFetion <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> myFetion<span style="color: #008000;">&#40;</span><span style="color: #666666;">'13800000000'</span>, <span style="color: #666666;">'abcde12345'</span>, <span style="color: #666666;">'ALL'</span>, <span style="color: #666666;">'PHP短信拜年了！'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
<span style="color: #008080; font-style: italic;">//$myNewFetion-&gt;printVar() ;</span>
<span style="color: #008000;">?&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=101</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】利用Windows7的“延迟启动”优化开机速度</title>
		<link>http://i.isclab.org/?p=98</link>
		<comments>http://i.isclab.org/?p=98#comments</comments>
		<pubDate>Sun, 28 Feb 2010 17:41:35 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[OS & Software]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=98</guid>
		<description><![CDATA[　　Windows7系统相对XP做了很多优化，其中有一处就是服务启动方式。相对于早先系统的“自动”、“手动”、“禁用”，Windows7新增了“延迟启动”选项。对于那些需要经常用到但又不需要开机立即启动的服务，可以通过设置“延迟启动”来优化系统的开机速度。操作截图如下：

]]></description>
			<content:encoded><![CDATA[<p>　　Windows7系统相对XP做了很多优化，其中有一处就是服务启动方式。相对于早先系统的“自动”、“手动”、“禁用”，Windows7新增了“延迟启动”选项。对于那些需要经常用到但又不需要开机立即启动的服务，可以通过设置“延迟启动”来优化系统的开机速度。操作截图如下：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/windows7-Service-start-delay.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/windows7-Service-start-delay-285x300.png" alt="" title="windows7 Service-start-delay" width="285" height="300" class="alignnone size-medium wp-image-99" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=98</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】WIFI手机实现的PPT翻页器(3)——程序和源代码</title>
		<link>http://i.isclab.org/?p=84</link>
		<comments>http://i.isclab.org/?p=84#comments</comments>
		<pubDate>Sat, 27 Feb 2010 06:49:55 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=84</guid>
		<description><![CDATA[　　终于搞定这个了用WIFI手机实现的PPT翻页器，可以不用去买专门的翻页器了。以下为项目过程所有代码，希望能对有需要的朋友提供帮助。

WIFI手机PPT翻页器 v1.0
2010-02-27
软件运行环境：
PC端：Windows XP/2003/Vista/Win7 + .NetFrameWork 3.5,
手机端:Windows Mobile 6.5 + .Net Compact FrameWork 3.5；
1、软件分为两个部分PC端程序和手机端程序。
2、程序运行之前，请确认手机能和PC机通过Wifi网络正常通讯；
3、必须在PC机的PowerPoint中启动播放幻灯片后，翻页程序才能看到效果；
4、本人手机是HTC Touch T3333，可以实现音量控制键翻页，对与其他设备可能需要修改代码，适当调整或者可以联系我。
软件更新:http://i.isclab.org
涉及到的技术：
C# Form编程
C# Socket编程
C# 调用Win32API 枚举窗口
C# 调用Win32API 模拟键盘
C# 调用Win32API Hook拦截键盘
C# 多线程
……
Python版本的程序也用到以上类似技术
WIFI手机PPT翻页器-Wireless PPT Presenter v1.0程序和源码
]]></description>
			<content:encoded><![CDATA[<p>　　终于搞定这个了用WIFI手机实现的PPT翻页器，可以不用去买专门的翻页器了。以下为项目过程所有代码，希望能对有需要的朋友提供帮助。<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/wireless-ppt-presenter-1.0-preview.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/wireless-ppt-presenter-1.0-preview-300x223.png" alt="WIFI手机PPT翻页器For Windows Mobile 6.5" title="wireless-ppt-presenter-1.0-preview" width="300" height="223" class="alignnone size-medium wp-image-90" /></a><br />
WIFI手机PPT翻页器 v1.0<br />
2010-02-27</p>
<p><strong>软件运行环境</strong>：<br />
PC端：Windows XP/2003/Vista/Win7 + .NetFrameWork 3.5,<br />
手机端:Windows Mobile 6.5 + .Net Compact FrameWork 3.5；<br />
1、软件分为两个部分PC端程序和手机端程序。<br />
2、程序运行之前，请确认手机能和PC机通过Wifi网络正常通讯；<br />
3、必须在PC机的PowerPoint中启动播放幻灯片后，翻页程序才能看到效果；<br />
4、本人手机是HTC Touch T3333，可以实现音量控制键翻页，对与其他设备可能需要修改代码，适当调整或者可以联系我。</p>
<p><strong>软件更新</strong>:http://i.isclab.org<br />
<strong>涉及到的技术</strong>：<br />
C# Form编程<br />
C# Socket编程<br />
C# 调用Win32API 枚举窗口<br />
C# 调用Win32API 模拟键盘<br />
C# 调用Win32API Hook拦截键盘<br />
C# 多线程<br />
……<br />
Python版本的程序也用到以上类似技术</p>
<p><a href='http://i.isclab.org/wp-content/uploads/2010/02/WIFI手机PPT翻页器-Wireless-PPT-Presenter-v1.0.zip'>WIFI手机PPT翻页器-Wireless PPT Presenter v1.0程序和源码</a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】WIFI手机实现的PPT翻页器（1a）——PC端(C#实现)</title>
		<link>http://i.isclab.org/?p=74</link>
		<comments>http://i.isclab.org/?p=74#comments</comments>
		<pubDate>Sat, 27 Feb 2010 05:48:30 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=74</guid>
		<description><![CDATA[　　近来智能手机非常流行，一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知，售前人员在给客户讲解PPT时，经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器（Wireless Presenter）作为一款产品就开始热销了。我是没钱买的，不过既然我们的手机支持编程，支持WIFI，那为什么不自己DIY一个翻页器呢？Let’s Go!
　　WIFI手机PPT翻页器的原理很简单：手机上的客户端通过无线网络向PC上的服务端发送翻页命令，PC上的服务器程序根据命令，在当前正在播放的 PPT幻灯片上模拟键盘操作。
　　今天先来介绍服务端的实现，我曾经用Python实现过一个服务端的程序，请参考《【原创】WIFI手机实现的PPT翻页器（1）——PC端(Python实现)》。但是Python程序打包会出些意外的问题，最终我改为C#开发。程序流程基本如下：
1、启动后程序监听本地指定端口（默认80）；
2、当有客户端连接监听端口并发送了指令则执行翻页操作；
3、翻页前通过枚举窗口找到PowerPoint幻灯片播放窗口，并将其设置为前端窗口；
4、程序将该窗口置顶（实际该步骤未实现），并执行相关键盘操作。如：向下翻页（N）、向前翻页（P）、首页（Home）、尾页（End）、退出（ESC）等；
5、程序循环运行。
关键技术：
1.C# WinForm编程
2.C# 调用Win32API枚举窗口、模拟键盘
3.C# Socket编程
4.C# 多线程编程
C#实现的WiFi PPT翻页器，主程序WirelessPresenter_PC.cs代码如下：


?Download download.txt1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
&#160;
using System.Runtime.InteropServices;
using System.Net;
using System.Net.Sockets;
using System.Threading;
&#160;
namespace Wireless_Presenter_on_PC
&#123;
&#160;
    public delegate bool CallBack&#40;int hwnd, int lParam&#41;;
&#160;
    public partial class frmWirelessPresenter : Form
    &#123;
&#160;
        &#91;DllImport&#40;&#34;user32&#34;&#41;&#93;
  [...]]]></description>
			<content:encoded><![CDATA[<p>　　近来智能手机非常流行，一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知，售前人员在给客户讲解PPT时，经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器（Wireless Presenter）作为一款产品就开始热销了。我是没钱买的，不过既然我们的手机支持编程，支持WIFI，那为什么不自己DIY一个翻页器呢？Let’s Go!<br />
　　WIFI手机PPT翻页器的原理很简单：手机上的客户端通过无线网络向PC上的服务端发送翻页命令，PC上的服务器程序根据命令，在当前正在播放的 PPT幻灯片上模拟键盘操作。<br />
　　今天先来介绍服务端的实现，我曾经用Python实现过一个服务端的程序，请参考<a href="http://i.isclab.org/?p=54">《【原创】WIFI手机实现的PPT翻页器（1）——PC端(Python实现)》。</a>但是Python程序打包会出些意外的问题，最终我改为C#开发。程序流程基本如下：<br />
1、启动后程序监听本地指定端口（默认80）；<br />
2、当有客户端连接监听端口并发送了指令则执行翻页操作；<br />
3、翻页前通过枚举窗口找到PowerPoint幻灯片播放窗口，并将其设置为前端窗口；<br />
4、程序将该窗口置顶（实际该步骤未实现），并执行相关键盘操作。如：向下翻页（N）、向前翻页（P）、首页（Home）、尾页（End）、退出（ESC）等；<br />
5、程序循环运行。</p>
<p>关键技术：<br />
1.C# WinForm编程<br />
2.C# 调用Win32API枚举窗口、模拟键盘<br />
3.C# Socket编程<br />
4.C# 多线程编程</p>
<p>C#实现的WiFi PPT翻页器，主程序WirelessPresenter_PC.cs代码如下：<br />
<span id="more-74"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://i.isclab.org/wp-content/plugins/wp-codebox/wp-codebox.php?p=74&amp;download=download.txt">download.txt</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p744"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
</pre></td><td class="code" id="p74code4"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.ComponentModel</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Drawing</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Runtime.InteropServices</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net.Sockets</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Threading</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> Wireless_Presenter_on_PC
<span style="color: #008000;">&#123;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">delegate</span> <span style="color: #6666cc; font-weight: bold;">bool</span> CallBack<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> hwnd, <span style="color: #6666cc; font-weight: bold;">int</span> lParam<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> frmWirelessPresenter <span style="color: #008000;">:</span> Form
    <span style="color: #008000;">&#123;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;user32&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> EnumWindows<span style="color: #008000;">&#40;</span>CallBack x, <span style="color: #6666cc; font-weight: bold;">int</span> y<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;user32&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> GetWindowText<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> hwnd, StringBuilder lptrstring, <span style="color: #6666cc; font-weight: bold;">int</span> nmaxcount<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;user32&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> GetParent<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> hwnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;user32&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> SetForegroundWindow<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> hwnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> StringBuilder WindowTitles <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> hwndPPT <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Threading</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Thread</span> myThread <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> TcpListener myTcpListener <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> frmWirelessPresenter<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            InitializeComponent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">protected</span> <span style="color: #0600FF; font-weight: bold;">override</span> CreateParams CreateParams
        <span style="color: #008000;">&#123;</span>
            get
            <span style="color: #008000;">&#123;</span>
                <span style="color: #6666cc; font-weight: bold;">int</span> CS_NOCLOSE <span style="color: #008000;">=</span> 0x200<span style="color: #008000;">;</span>
                CreateParams parameters <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">base</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateParams</span><span style="color: #008000;">;</span>
                parameters<span style="color: #008000;">.</span><span style="color: #0000FF;">ClassStyle</span> <span style="color: #008000;">|=</span> CS_NOCLOSE<span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">return</span> parameters<span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnStart_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> validationCheck<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
&nbsp;
            btnStart<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//btnStop.Enabled = true;</span>
&nbsp;
&nbsp;
            <span style="color: #008080; font-style: italic;">//System.Threading.Thread myThread;</span>
            myThread <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Threading</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Thread</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Threading</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">ThreadStart</span><span style="color: #008000;">&#40;</span>CreateLitener<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            myThread<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//MessageBox.Show(WindowTitles.ToString());</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//  创建本地监听函数</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> CreateLitener<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">int</span> port <span style="color: #008000;">=</span> Int32<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>txtPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008080; font-style: italic;">//TcpListener server = new TcpListener(IPAddress.Any, port);</span>
                <span style="color: #008080; font-style: italic;">//server.Start();</span>
                myTcpListener <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TcpListener<span style="color: #008000;">&#40;</span>IPAddress<span style="color: #008000;">.</span><span style="color: #0000FF;">Any</span>, port<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                myTcpListener<span style="color: #008000;">.</span><span style="color: #0000FF;">Start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    TcpClient client <span style="color: #008000;">=</span> myTcpListener<span style="color: #008000;">.</span><span style="color: #0000FF;">AcceptTcpClient</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    NetworkStream stream <span style="color: #008000;">=</span> client<span style="color: #008000;">.</span><span style="color: #0000FF;">GetStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> bytes <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">20</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
                    <span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">;</span>
&nbsp;
                    <span style="color: #008080; font-style: italic;">// Loop to receive all the data sent by the client.</span>
                    i <span style="color: #008000;">=</span> stream<span style="color: #008000;">.</span><span style="color: #0000FF;">Read</span><span style="color: #008000;">&#40;</span>bytes, <span style="color: #FF0000;">0</span>, bytes<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    ppt_processCMD<span style="color: #008000;">&#40;</span>Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">ASCII</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetString</span><span style="color: #008000;">&#40;</span>bytes<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>SocketException e<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>e<span style="color: #008000;">.</span><span style="color: #0000FF;">Message</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 枚举系统窗口，找到幻灯片播放窗口</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ShowEmenuResult<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> hwnd, <span style="color: #6666cc; font-weight: bold;">int</span> lParam<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//int hwndParent = GetParent(hwnd);</span>
            <span style="color: #008080; font-style: italic;">//if (0 == hwndParent) return false;</span>
            StringBuilder s <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            GetWindowText<span style="color: #008000;">&#40;</span>hwnd, s, s<span style="color: #008000;">.</span><span style="color: #0000FF;">Capacity</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToLower</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;powerpoint&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> s<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;幻灯片放映&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">==</span> hwndPPT<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                WindowTitles<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                SetForegroundWindow<span style="color: #008000;">&#40;</span>hwnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                hwndPPT <span style="color: #008000;">=</span> hwnd<span style="color: #008000;">;</span>
                <span style="color: #008080; font-style: italic;">//MessageBox.Show(WindowTitles.ToString());</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnStop_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">!=</span>  myTcpListener<span style="color: #008000;">&#41;</span> myTcpListener<span style="color: #008000;">.</span><span style="color: #0000FF;">Stop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">!=</span> myThread<span style="color: #008000;">&#41;</span> myThread<span style="color: #008000;">.</span><span style="color: #0000FF;">Abort</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 键盘模拟</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> key<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> CheckWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                CallBack myCallBack <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CallBack<span style="color: #008000;">&#40;</span>ShowEmenuResult<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                EnumWindows<span style="color: #008000;">&#40;</span>myCallBack, <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span> <span style="color: #008000;">==</span> CheckWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
                <span style="color: #0600FF; font-weight: bold;">else</span>
                <span style="color: #008000;">&#123;</span>
                    SetForegroundWindow<span style="color: #008000;">&#40;</span>hwndPPT<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    SendKeys<span style="color: #008000;">.</span><span style="color: #0000FF;">SendWait</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">else</span>
            <span style="color: #008000;">&#123;</span>
                SetForegroundWindow<span style="color: #008000;">&#40;</span>hwndPPT<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                SendKeys<span style="color: #008000;">.</span><span style="color: #0000FF;">SendWait</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008080; font-style: italic;">//SendKeys.Flush();</span>
&nbsp;
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 解析命令</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> ppt_processCMD<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> cmd<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">//string cmd = cmd2.Trim();</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;UP&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{P}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;N&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;DOWN&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{N}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;P&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;BLACK&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{B}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;B&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;WHITE&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{W}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;W&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;HOME&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{HOME}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;HOME&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;END&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{END}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;END&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>cmd<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;QUIT&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                ppt_sendkey<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{ESC}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// &quot;ESC&quot;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 确认Windows窗口是否存在</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> CheckWindow<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            StringBuilder s <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">100</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">;</span>
            GetWindowText<span style="color: #008000;">&#40;</span>hwndPPT, s, s<span style="color: #008000;">.</span><span style="color: #0000FF;">Capacity</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&lt;</span> s<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 端口合法性检验</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> validationCheck<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span> <span style="color: #008000;">&lt;</span> Int32<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>txtPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> <span style="color: #FF0000;">65535</span> <span style="color: #008000;">&gt;</span> Int32<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>txtPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>程序界面预览如下：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-pc-with-csharp.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-pc-with-csharp.png" alt="" title="wireless-presenter-pc-with-csharp" width="300" height="300" class="alignnone size-full wp-image-75" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=74</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】WIFI手机实现的PPT翻页器（2）——手机端(C#实现)</title>
		<link>http://i.isclab.org/?p=61</link>
		<comments>http://i.isclab.org/?p=61#comments</comments>
		<pubDate>Wed, 24 Feb 2010 01:51:16 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=61</guid>
		<description><![CDATA[接上文，WIFI手机实现PPT翻页器，手机端程序的开发及流程如下：
1、使用VS2008创建智能设备项目，.NET FrameWork选择3.5版本；
2、编程语言使用C#；
3、手机上的客户端程序在检查IP地址和端口合法性后，启用翻页按钮和相关菜单；
4、程序根据用户通过菜单选择的命令向手机上的服务端程序发送指令；
5、手机上必须安装.NET Compact FrameWork 3.5才能运行改程序。
6、对于HTC Touch2 T3333型号的手机，支持通过音量控制键翻页。
关键技术：
1.C# Windows Mobile编程
2.C# Socket编程
3.C# 调用Win32API对键盘进行Hook
4.C# 正则表达式使用
相关文件WirelessPresenter.cs代码如下：

?Download download.txt20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
&#160;
using System.Text.RegularExpressions;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
&#160;
&#160;
namespace Wireless_Presenter
&#123;
    public partial class WirelessPresenter_WM : Form
    &#123;
        private bool pptInited = false; // 准备好了,可以翻页
   [...]]]></description>
			<content:encoded><![CDATA[<p>接上文，WIFI手机实现PPT翻页器，手机端程序的开发及流程如下：<br />
1、使用VS2008创建智能设备项目，.NET FrameWork选择3.5版本；<br />
2、编程语言使用C#；<br />
3、手机上的客户端程序在检查IP地址和端口合法性后，启用翻页按钮和相关菜单；<br />
4、程序根据用户通过菜单选择的命令向手机上的服务端程序发送指令；<br />
5、手机上必须安装.NET Compact FrameWork 3.5才能运行改程序。<br />
6、对于HTC Touch2 T3333型号的手机，支持通过音量控制键翻页。</p>
<p><strong>关键技术</strong>：<br />
1.C# Windows Mobile编程<br />
2.C# Socket编程<br />
3.C# 调用Win32API对键盘进行Hook<br />
4.C# 正则表达式使用<br />
相关文件WirelessPresenter.cs代码如下：<span id="more-61"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://i.isclab.org/wp-content/plugins/wp-codebox/wp-codebox.php?p=61&amp;download=download.txt">download.txt</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p616"><td class="line_numbers"><pre>20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
</pre></td><td class="code" id="p61code6"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.ComponentModel</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Drawing</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text.RegularExpressions</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Net.Sockets</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Runtime.InteropServices</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
<span style="color: #0600FF; font-weight: bold;">namespace</span> Wireless_Presenter
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">partial</span> <span style="color: #6666cc; font-weight: bold;">class</span> WirelessPresenter_WM <span style="color: #008000;">:</span> Form
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> pptInited <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 准备好了,可以翻页</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> inputValidate <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 文本框内字符校验通过</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> WirelessPresenter_WM<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            InitializeComponent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 退出</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuExit_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">hHookKey</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">HookStop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 停止Hook</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 参数环境准备</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuStart_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            inputValidate <span style="color: #008000;">=</span> checkInput<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 检查IP地址和端口的合法性</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>inputValidate<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                pptInited <span style="color: #008000;">=</span> sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;TEST&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 测试连接可用性</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>pptInited<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    PrepareParameters<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 准备参数</span>
                    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">HookStart</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 启动Hook</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">else</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;请检查参数格式:)&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// IP地址和端口的合法性检查</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> checkInput<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            Regex regexIPAddress <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;^\d+\.\d+\.\d+\.\d+$&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Regex regexPort <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;^\d+$&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>regexIPAddress<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>txtServerIP<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> regexPort<span style="color: #008000;">.</span><span style="color: #0000FF;">IsMatch</span><span style="color: #008000;">&#40;</span>txtServerPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">else</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuReset_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            resetParameters<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 重置程序参数</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 准备参数，可以操作PPT了</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> PrepareParameters<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            txtServerIP<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            txtServerPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            btnPageDown<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            btnPageUp<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            mnuHome<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            mnuEnd<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            mnuBlack<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            mnuWhite<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            mnuQuit<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//pptInited = false;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #008080; font-style: italic;">// 重置程序参数</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> resetParameters<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            txtServerIP<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            txtServerPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
            btnPageDown<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            btnPageUp<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            mnuHome<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            mnuEnd<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            mnuBlack<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            mnuWhite<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            mnuQuit<span style="color: #008000;">.</span><span style="color: #0000FF;">Enabled</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
&nbsp;
            pptInited <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">hHookKey</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">HookStop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 停止Hook</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
        <span style="color: #008080; font-style: italic;">// PPT前一页</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnPageUp_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;UP&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//sendCommand(&quot;GET /\r\n\r\n&quot;);</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// PPT后一页</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> btnPageDown_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;DOWN&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 切换到幻灯片首页</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuHome_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;HOME&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 切换到幻灯片尾页</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuEnd_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;END&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 黑屏切换</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuBlack_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;BLACK&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 白屏切换</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuWhite_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;WHITE&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 退出放映</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuQuit_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            sendCommand<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;QUIT&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 显示帮助</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> mnuHelp_Click<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> sender, EventArgs e<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            ShowHelp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// 帮助信息</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> ShowHelp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            StringBuilder strHelp <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;WIFI手机PPT翻译器<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;For Windows Mobile 6.5<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;.NET CF 3.5<span style="color: #008080; font-weight: bold;">\n</span><span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Version:1.0<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Author:i@isclab.org<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Site:http://i.isclab.org<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Date:2010-02-23&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span>strHelp<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #666666;">&quot;Wireless Presenter&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #008080; font-style: italic;">// 创建Socket发送翻页指令</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">bool</span> sendCommand<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> txtCommand<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            IPAddress address <span style="color: #008000;">=</span> IPAddress<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>txtServerIP<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #6666cc; font-weight: bold;">int</span> port <span style="color: #008000;">=</span> Convert<span style="color: #008000;">.</span><span style="color: #0000FF;">ToInt32</span><span style="color: #008000;">&#40;</span>txtServerPort<span style="color: #008000;">.</span><span style="color: #0000FF;">Text</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            IPEndPoint myIPEndPoit <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> IPEndPoint<span style="color: #008000;">&#40;</span>address, port<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            Socket s <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Socket<span style="color: #008000;">&#40;</span>AddressFamily<span style="color: #008000;">.</span><span style="color: #0000FF;">InterNetwork</span>, SocketType<span style="color: #008000;">.</span><span style="color: #0000FF;">Stream</span>, ProtocolType<span style="color: #008000;">.</span><span style="color: #0000FF;">Tcp</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF; font-weight: bold;">try</span>
            <span style="color: #008000;">&#123;</span>
                s<span style="color: #008000;">.</span><span style="color: #0000FF;">Connect</span><span style="color: #008000;">&#40;</span>myIPEndPoit<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">.</span><span style="color: #0000FF;">Connected</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #6666cc; font-weight: bold;">byte</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> buffer <span style="color: #008000;">=</span> Encoding<span style="color: #008000;">.</span><span style="color: #0000FF;">ASCII</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetBytes</span><span style="color: #008000;">&#40;</span>txtCommand<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    s<span style="color: #008000;">.</span><span style="color: #0000FF;">Send</span><span style="color: #008000;">&#40;</span>buffer, buffer<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span>, <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #008080; font-style: italic;">//byte[] buffer_read = new byte[100] ;</span>
                    <span style="color: #008080; font-style: italic;">//s.Receive(buffer_read);</span>
                    <span style="color: #008080; font-style: italic;">//MessageBox.Show(Encoding.UTF8.GetString(buffer_read,0,buffer_read.Length).ToString());</span>
                    s<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #008000;">&#125;</span>
                <span style="color: #0600FF; font-weight: bold;">else</span>
                <span style="color: #008000;">&#123;</span>
                    MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;连接PC端失败！<span style="color: #008080; font-weight: bold;">\n</span>请确认网络连接参数！&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0600FF; font-weight: bold;">catch</span>
            <span style="color: #008000;">&#123;</span>
                MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Socket初始化失败！<span style="color: #008080; font-weight: bold;">\n</span>请确认网络连接参数&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">delegate</span> <span style="color: #6666cc; font-weight: bold;">int</span> HookKeyProc<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> code, IntPtr wParam, IntPtr lParam<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> HookKeyProc hookKeyDeleg<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> hHookKey <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> key_VOLUMEDOWN <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 音量增加键被按下的次数</span>
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> key_T_VOLUMEUP <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// 音量降低键被按下的次数</span>
        <span style="color: #008080;">#region public methods</span>
&nbsp;
&nbsp;
        <span style="color: #008080; font-style: italic;">//安装钩子</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> HookStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hHookKey <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
&nbsp;
                <span style="color: #008080; font-style: italic;">//  如果已经安装则卸载</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">HookStop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008000;">&#125;</span>
&nbsp;
            hookKeyDeleg <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> HookKeyProc<span style="color: #008000;">&#40;</span>HookKeyProcedure<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            hHookKey <span style="color: #008000;">=</span> SetWindowsHookEx<span style="color: #008000;">&#40;</span>WH_KEYBOARD_LL, hookKeyDeleg, GetModuleHandle<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hHookKey <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">throw</span> <span style="color: #008000;">new</span> SystemException<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Failed acquiring of the hook.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//拆除钩子</span>
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> HookStop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            UnhookWindowsHookEx<span style="color: #008000;">&#40;</span>hHookKey<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#endregion</span>
&nbsp;
        <span style="color: #008080;">#region protected and private methods</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> HookKeyProcedure<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> code, IntPtr wParam, IntPtr lParam<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
&nbsp;
            KBDLLHOOKSTRUCT hookStruct <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>KBDLLHOOKSTRUCT<span style="color: #008000;">&#41;</span>Marshal<span style="color: #008000;">.</span><span style="color: #0000FF;">PtrToStructure</span><span style="color: #008000;">&#40;</span>lParam, <span style="color: #008000;">typeof</span><span style="color: #008000;">&#40;</span>KBDLLHOOKSTRUCT<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>code <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">return</span> CallNextHookEx<span style="color: #008000;">&#40;</span>hookKeyDeleg, code, wParam, lParam<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hookStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">vkCode</span> <span style="color: #008000;">==</span> 0x5B<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//如果捕捉到VK_LWIN按键</span>
                <span style="color: #008080; font-style: italic;">//......处理......             </span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//返回-1表示已经处理了，不再往下传递</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hookStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">vkCode</span> <span style="color: #008000;">==</span> 0x26<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//如果捕捉到VK_LEFT按键</span>
                <span style="color: #008080; font-style: italic;">//......处理......</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hookStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">vkCode</span> <span style="color: #008000;">==</span> 0x26<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//如果捕捉到VK_LEFT按键</span>
                <span style="color: #008080; font-style: italic;">//......处理......</span>
&nbsp;
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// 117和118 是HTC Touch2 T3333系统中获取到的按键数值，其他系统可能稍作调整</span>
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hookStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">vkCode</span> <span style="color: #008000;">==</span> 0x75<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">// VOLUMEUP</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">key_T_VOLUMEUP</span><span style="color: #008000;">++</span> <span style="color: #008000;">%</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> pptInited<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">sendCommand</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;UP&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>hookStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">vkCode</span> <span style="color: #008000;">==</span> 0x76<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//V UP</span>
                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">1</span> <span style="color: #008000;">==</span> <span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">key_VOLUMEDOWN</span><span style="color: #008000;">++</span> <span style="color: #008000;">%</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> pptInited<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #0600FF; font-weight: bold;">this</span><span style="color: #008000;">.</span><span style="color: #0000FF;">sendCommand</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;DOWN&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #008000;">&#125;</span>
                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//如果你想知道该键的值</span>
            <span style="color: #008080; font-style: italic;">//MessageBox.Show(hookStruct.vkCode.ToString());</span>
            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//测试发现会死机</span>
            <span style="color: #008080; font-style: italic;">//int iCall = CallNextHookEx(hookKeyDeleg, code, wParam, lParam);</span>
            <span style="color: #008080; font-style: italic;">// 没处理的键的消息往下传递</span>
            <span style="color: #008080; font-style: italic;">//return iCall;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #008080;">#endregion</span>
&nbsp;
        <span style="color: #008080;">#region P/Invoke declarations</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;coredll.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> SetWindowsHookEx<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> type, HookKeyProc HookKeyProc, IntPtr hInstance, <span style="color: #6666cc; font-weight: bold;">int</span> m<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #008080; font-style: italic;">//private static extern int SetWindowsHookEx(int type, HookMouseProc HookMouseProc, IntPtr hInstance, int m);</span>
&nbsp;
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;coredll.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> IntPtr GetModuleHandle<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> mod<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;coredll.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> CallNextHookEx<span style="color: #008000;">&#40;</span>
&nbsp;
                HookKeyProc hhk,
&nbsp;
                <span style="color: #6666cc; font-weight: bold;">int</span> nCode,
&nbsp;
                IntPtr wParam,
&nbsp;
                IntPtr lParam
&nbsp;
                <span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;coredll.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> GetCurrentThreadId<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#91;</span>DllImport<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;coredll.dll&quot;</span>, SetLastError <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">extern</span> <span style="color: #6666cc; font-weight: bold;">int</span> UnhookWindowsHookEx<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> idHook<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">struct</span> KBDLLHOOKSTRUCT
        <span style="color: #008000;">&#123;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> vkCode<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> scanCode<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> flags<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> time<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> IntPtr dwExtraInfo<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">int</span> WH_KEYBOARD_LL <span style="color: #008000;">=</span> <span style="color: #FF0000;">20</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> KeyBoardInfo
        <span style="color: #008000;">&#123;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> vkCode<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> scanCode<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> flags<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> time<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #008080;">#endregion</span>
&nbsp;
&nbsp;
&nbsp;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>完整项目代码将在后续文档中发布，请关注本站最新更新内容。<br />
WIFI手机的PPT翻页器界面预览：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-windows-mobile-6.5.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-windows-mobile-6.5-190x300.png" alt="" title="wireless presenter-windows mobile 6.5" width="190" height="300" class="alignnone size-medium wp-image-64" /></a><br />
<a href="http://i.isclab.org/?p=54">【原创】WIFI手机实现的PPT翻页器（1b）——PC端(Python实现)</a></p>
<p><a href="http://i.isclab.org/?p=74">【原创】WIFI手机实现的PPT翻页器（1a）——PC端(C#实现)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=61</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】WIFI手机实现的PPT翻页器（1b）——PC端(Python实现)</title>
		<link>http://i.isclab.org/?p=54</link>
		<comments>http://i.isclab.org/?p=54#comments</comments>
		<pubDate>Tue, 23 Feb 2010 16:57:43 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=54</guid>
		<description><![CDATA[　　近来智能手机非常流行，一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知，售前人员在给客户讲解PPT时，经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器（Wireless Presenter）作为一款产品就开始热销了。我是没钱买的，不过既然我们的手机支持编程，支持WIFI，那为什么不自己DIY一个翻页器呢？Let&#8217;s Go!
　　WIFI手机PPT翻页器的原理很简单：手机上的客户端通过无线网络向PC上的服务端发送翻页命令，PC上的服务器程序根据命令，在当前正在播放的PPT幻灯片上模拟键盘操作。
　　今天先来介绍服务端的实现，该服务端程序我使用了Python2.6进行开发。程序流程基本如下：
1、启动后程序监听本地指定端口（默认80）；
2、当有客户端连接监听端口并发送了指令则执行翻页操作；
3、翻页前通过枚举窗口找到PowerPoint幻灯片播放窗口；
4、程序将该窗口置顶（实际该步骤未实现），并执行相关键盘操作。如：向下翻页（N）、向前翻页（P）、首页（Home）、尾页（End）、退出（ESC）等；
5、程序循环运行。
关键技术：
1.WxPython编程
2.Python调用Win32API
3.Win32API枚举窗口、模拟键盘
5.Python Socket编程
5.Python 多线程使用

PPTP_Server.pyw代码如下：

?Download download.txt1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!D:/Python26/python.exe
# -*- coding:cp936 -*-
import socket
import sys
import wx
import win32api
import win32ui
import win32gui
import SocketServer
import threading
&#160;
class MyHandler&#40;SocketServer.BaseRequestHandler&#41;:
    def _my_callback&#40;self,hwnd, extra&#41;:
        caption=win32gui.GetWindowText&#40;hwnd&#41;
        if caption.find&#40;'PowerPoint 幻灯片放映'&#41;!=-1:
            #win32gui.SetWindowText(hwnd, 'Powered [...]]]></description>
			<content:encoded><![CDATA[<p>　　近来智能手机非常流行，一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知，售前人员在给客户讲解PPT时，经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器（Wireless Presenter）作为一款产品就开始热销了。我是没钱买的，不过既然我们的手机支持编程，支持WIFI，那为什么不自己DIY一个翻页器呢？Let&#8217;s Go!<br />
　　WIFI手机PPT翻页器的原理很简单：手机上的客户端通过无线网络向PC上的服务端发送翻页命令，PC上的服务器程序根据命令，在当前正在播放的PPT幻灯片上模拟键盘操作。<br />
　　今天先来介绍服务端的实现，该服务端程序我使用了Python2.6进行开发。程序流程基本如下：<br />
1、启动后程序监听本地指定端口（默认80）；<br />
2、当有客户端连接监听端口并发送了指令则执行翻页操作；<br />
3、翻页前通过枚举窗口找到PowerPoint幻灯片播放窗口；<br />
4、程序将该窗口置顶（实际该步骤未实现），并执行相关键盘操作。如：向下翻页（N）、向前翻页（P）、首页（Home）、尾页（End）、退出（ESC）等；<br />
5、程序循环运行。</p>
<p><strong>关键技术</strong>：<br />
1.WxPython编程<br />
2.Python调用Win32API<br />
3.Win32API枚举窗口、模拟键盘<br />
5.Python Socket编程<br />
5.Python 多线程使用<br />
<span id="more-54"></span><br />
<strong>PPTP_Server.pyw代码如下</strong>：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://i.isclab.org/wp-content/plugins/wp-codebox/wp-codebox.php?p=54&amp;download=download.txt">download.txt</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p548"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
</pre></td><td class="code" id="p54code8"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!D:/Python26/python.exe</span>
<span style="color: #808080; font-style: italic;"># -*- coding:cp936 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">socket</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> wx
<span style="color: #ff7700;font-weight:bold;">import</span> win32api
<span style="color: #ff7700;font-weight:bold;">import</span> win32ui
<span style="color: #ff7700;font-weight:bold;">import</span> win32gui
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">SocketServer</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">threading</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> MyHandler<span style="color: black;">&#40;</span><span style="color: #dc143c;">SocketServer</span>.<span style="color: black;">BaseRequestHandler</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> _my_callback<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>,hwnd, extra<span style="color: black;">&#41;</span>:
        caption=win32gui.<span style="color: black;">GetWindowText</span><span style="color: black;">&#40;</span>hwnd<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> caption.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'PowerPoint 幻灯片放映'</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">!</span>=-<span style="color: #ff4500;">1</span>:
            <span style="color: #808080; font-style: italic;">#win32gui.SetWindowText(hwnd, 'Powered by - Mozilla Firefox')</span>
            windowTitle = win32gui.<span style="color: black;">GetWindowText</span><span style="color: black;">&#40;</span>hwnd<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">print</span> windowTitle
            <span style="color: #008000;">self</span>.<span style="color: black;">pptWindow</span> = win32ui.<span style="color: black;">FindWindow</span><span style="color: black;">&#40;</span><span style="color: #008000;">None</span>, windowTitle<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> ppt_sendkey<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">None</span> == <span style="color: #008000;">self</span>.<span style="color: black;">pptWindow</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;找不到正在播放的幻灯片&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
        <span style="color: #808080; font-style: italic;">#win32gui.SetForegroundWindow(self.pptWindow)</span>
        <span style="color: #808080; font-style: italic;">#如何激活PowerPoint的子窗口?</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Ready to SendKeys!!!&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">self</span>.<span style="color: black;">pptWindow</span>,<span style="color: #008000;">type</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">pptWindow</span><span style="color: black;">&#41;</span>
        win32api.<span style="color: black;">Sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">500</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 给个延时，用于窗口置顶后程序反应的延迟</span>
        win32api.<span style="color: black;">keybd_event</span><span style="color: black;">&#40;</span>key, <span style="color: #ff4500;">0</span>, <span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> enumWindows<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        win32gui.<span style="color: black;">EnumWindows</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>._my_callback, <span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> ppt_process<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>,<span style="color: #dc143c;">cmd</span><span style="color: black;">&#41;</span>:<span style="color: #808080; font-style: italic;">#解析远程命令:上翻和下翻</span>
        <span style="color: #808080; font-style: italic;">#print cmd</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;DOWN&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x4e<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'N'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;UP&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x50<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'P'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;BLACK&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x42<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'B'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;WHITE&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x57<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'W'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;HOME&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x24<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'HOME'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;END&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x23<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'END'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> -<span style="color: #ff4500;">1</span> <span style="color: #66cc66;">!</span>= <span style="color: #dc143c;">cmd</span>.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;QUIT&quot;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">ppt_sendkey</span><span style="color: black;">&#40;</span>0x1B<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 'ESC'</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> printsocket<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">pptWindow</span> = <span style="color: #008000;">None</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">enumWindows</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> finish<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> handle<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">printsocket</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff4500;">1</span>:
            dataReceived = <span style="color: #008000;">None</span>
            dataReceived = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">recv</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">print</span> dataReceived
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> dataReceived:
                <span style="color: #008000;">self</span>.<span style="color: black;">printsocket</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">break</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">ppt_process</span><span style="color: black;">&#40;</span>dataReceived<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> MyFrame<span style="color: black;">&#40;</span>wx.<span style="color: black;">Frame</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        wx.<span style="color: black;">Frame</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #008000;">None</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;WiFi手机PPT翻页器&quot;</span>, size = <span style="color: black;">&#40;</span><span style="color: #ff4500;">300</span>, <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">panel</span> = wx.<span style="color: black;">Panel</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sizer</span> = wx.<span style="color: black;">BoxSizer</span><span style="color: black;">&#40;</span>wx.<span style="color: black;">HORIZONTAL</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">panel</span>.<span style="color: black;">SetSizer</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">sizer</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">txt</span> = wx.<span style="color: black;">StaticText</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;监听端口:&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">inputText</span> = wx.<span style="color: black;">TextCtrl</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;80&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">button</span> = wx.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;开始&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">Bind</span><span style="color: black;">&#40;</span>wx.<span style="color: black;">EVT_BUTTON</span>, <span style="color: #008000;">self</span>.<span style="color: black;">OnStart</span>, <span style="color: #008000;">self</span>.<span style="color: black;">button</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">button</span>.<span style="color: black;">SetDefault</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">sizer</span>.<span style="color: black;">Add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">txt</span>, <span style="color: #ff4500;">0</span>, wx.<span style="color: black;">TOP</span>|wx.<span style="color: black;">LEFT</span>, <span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sizer</span>.<span style="color: black;">Add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">inputText</span>, <span style="color: #ff4500;">0</span>, wx.<span style="color: black;">TOP</span>|wx.<span style="color: black;">LEFT</span>, <span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sizer</span>.<span style="color: black;">Add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">button</span>, <span style="color: #ff4500;">0</span>, wx.<span style="color: black;">TOP</span>|wx.<span style="color: black;">LEFT</span>, <span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">Centre</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> OnStart<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, event<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">port</span> = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">inputText</span>.<span style="color: black;">GetValue</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>        
        wx.<span style="color: black;">MessageBox</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;可以播放PPT幻灯片了:)&quot;</span>, <span style="color: #483d8b;">&quot;注意&quot;</span><span style="color: black;">&#41;</span>
        th = <span style="color: #dc143c;">threading</span>.<span style="color: black;">Thread</span><span style="color: black;">&#40;</span>target=<span style="color: #008000;">self</span>.<span style="color: black;">ppt_receiver</span>,args=<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        th.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> ppt_receiver<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<span style="color: #808080; font-style: italic;">#启动监听器，等待命令</span>
        myServer = <span style="color: #dc143c;">SocketServer</span>.<span style="color: black;">ThreadingTCPServer</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'0.0.0.0'</span>,<span style="color: #008000;">self</span>.<span style="color: black;">port</span><span style="color: black;">&#41;</span>, MyHandler<span style="color: black;">&#41;</span>
        myServer.<span style="color: black;">serve_forever</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    myApp = wx.<span style="color: black;">PySimpleApp</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    MyFrame<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">Show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    myApp.<span style="color: black;">MainLoop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>服务端运行后效果图：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-server.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/wireless-presenter-server.png" alt="" title="wireless-presenter-server" width="300" height="100" class="alignnone size-full wp-image-57" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=54</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】飞信短信发送的PHP类</title>
		<link>http://i.isclab.org/?p=43</link>
		<comments>http://i.isclab.org/?p=43#comments</comments>
		<pubDate>Wed, 17 Feb 2010 09:05:36 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=43</guid>
		<description><![CDATA[　　程序有bug，已经更新！请参考《【原创】PHP飞信发送类的修正（感谢jjchibin）》
　　飞信发送API网上有很多，但没有多少是我自己满意的。很多网站提供基于Web的API调用方式向用户提供服务，但是作为使用者我心里还是没底。我总是担心自己的密码会被某些人记录，一直想写一个自己用的PHP版本飞信发送程序。
　　因为本人没有任何逆向基础，同时飞信版本变化不同。从nathan在百度上发布《飞信协议分析》到现在也有3年了，且当时分析的是飞信2006版本。这中间变化太多，也使得我在写PHP版本飞信发送程序是走了很多弯路。
　　我曾经拜读过superli_198的《让 PHP 程序利用飞信（Fetion）发免费短信》，但是该版本使用的通讯方式目前已经不被飞信支持，且superli_198也没有做新的更新。我也下载过c.young[@]xicabin.com的Openfetion，但是该版本存在明显bug，现在也不能正常使用。无奈只能硬着头皮修改一个C#版本的飞信发送程序。
　　在移植C#版本的飞信发送程序到PHP过程中，我遇到了一个关于MD5加密相关的问题，困了很多天。最后在CSDN论坛ycTIN的帮助下，问题得以解决。非常感谢ycTIN。 以下是我完成的PHP版飞信短信发送类，截止到2010年2月17日下午4点该程序一直能正常工作。技术上没有什么难度，发在这里和大家交流。

?Download download.txt1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
&#60;?php
/**
 *@desc 飞信短信发送类(Encoded:UTF-8)
 *使用方法：$myNewFetion = new myFetion('1381111111', 'password','1382222222', '测试消息' );
 *非常感谢CSDN论坛ycTIN在MD5加密部分的帮助!
 *本程序未做容错处理,为防止诈骗短信乱发，程序不提供添加好友功能
 *测试URL:http://i.isclab.org/tools/fetion.php
 *
 *程序运行条件：
 *1.服务器能够访问飞信服务器nav.fetion.com.cn的443端口（https）
 *2.服务器端PHP程序能够创建socket访问221.176.31.4的8080端口
 *
 *关键技术：
 *1.CURL + SSL通讯
 *2.PHP Socket编程
 *3.PHP MD5函数的深入理解
 *4.PHP DOM处理XML
 *
 *@author shadu AT foxmail DOT com /CNOS(http://bbs.ouropen.org)
 *@version 2010-02-17
 *@copyright 任意拷贝和修改！
 **/
class myFetion&#123;
    private $mobile_no   = '1381111111'; [...]]]></description>
			<content:encoded><![CDATA[<p>　　<font color="red"><b>程序有bug，已经更新！</b></font>请参考《<a href="http://i.isclab.org/?p=101">【原创】PHP飞信发送类的修正（感谢jjchibin）</a>》<br />
　　飞信发送API网上有很多，但没有多少是我自己满意的。很多网站提供基于Web的API调用方式向用户提供服务，但是作为使用者我心里还是没底。我总是担心自己的密码会被某些人记录，一直想写一个自己用的PHP版本飞信发送程序。<br />
　　因为本人没有任何逆向基础，同时飞信版本变化不同。从nathan在百度上发布《<a href="http://hi.baidu.com/nathan2007/blog/item/1ee3823422ebbdb6d1a2d376.html">飞信协议分析</a>》到现在也有3年了，且当时分析的是飞信2006版本。这中间变化太多，也使得我在写PHP版本飞信发送程序是走了很多弯路。<br />
　　我曾经拜读过superli_198的《<a href="http://www.sinoutopia.org/wp/?p=1407">让 PHP 程序利用飞信（Fetion）发免费短信</a>》，但是该版本使用的通讯方式目前已经不被飞信支持，且superli_198也没有做新的更新。我也下载过c.young[@]xicabin.com的<a href="http://openfetion.sourceforge.net/">Openfetion</a>，但是该版本存在明显bug，现在也不能正常使用。无奈只能硬着头皮修改一个<a href="http://xqin.googlecode.com/svn/trunk/Programming%20Language/C_Sharp/WebFetion/">C#版本的飞信发送程序</a>。<br />
　　在移植C#版本的飞信发送程序到PHP过程中，我遇到了一个关于MD5加密相关的问题，困了很多天。最后在CSDN论坛ycTIN的帮助下，问题得以解决。非常感谢ycTIN。 以下是我完成的PHP版飞信短信发送类，截止到2010年2月17日下午4点该程序一直能正常工作。技术上没有什么难度，发在这里和大家交流。<span id="more-43"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://i.isclab.org/wp-content/plugins/wp-codebox/wp-codebox.php?p=43&amp;download=download.txt">download.txt</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4310"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
</pre></td><td class="code" id="p43code10"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 *@desc 飞信短信发送类(Encoded:UTF-8)
 *使用方法：$myNewFetion = new myFetion('1381111111', 'password','1382222222', '测试消息' );
 *非常感谢CSDN论坛ycTIN在MD5加密部分的帮助!
 *本程序未做容错处理,为防止诈骗短信乱发，程序不提供添加好友功能
 *测试URL:http://i.isclab.org/tools/fetion.php
 *
 *程序运行条件：
 *1.服务器能够访问飞信服务器nav.fetion.com.cn的443端口（https）
 *2.服务器端PHP程序能够创建socket访问221.176.31.4的8080端口
 *
 *关键技术：
 *1.CURL + SSL通讯
 *2.PHP Socket编程
 *3.PHP MD5函数的深入理解
 *4.PHP DOM处理XML
 *
 *@author shadu AT foxmail DOT com /CNOS(http://bbs.ouropen.org)
 *@version 2010-02-17
 *@copyright 任意拷贝和修改！
 **/</span>
<span style="color: #000000; font-weight: bold;">class</span> myFetion<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$mobile_no</span>   <span style="color: #339933;">=</span> <span style="color: #0000ff;">'1381111111'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 发送者手机号</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$fetion_no</span>   <span style="color: #339933;">=</span> <span style="color: #0000ff;">'738713940'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 发送者飞信号，程序自动获取</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$fetion_pwd</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'mypassword'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 发送者飞信登录密码</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$cookie_file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'cookie.txt'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 临时存放的cookie文件</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$SMS_RECEIVER</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'1382222222'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//  短信接收者手机号码 </span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$SMS_TEXT</span>     <span style="color: #339933;">=</span> <span style="color: #0000ff;">'sms test'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 短信内容，支持中文</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$NONCE</span>       <span style="color: #339933;">=</span> <span style="color: #0000ff;">'AAB3238922BCC25A6F606EB525FFDC56'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// SIPC服务器返回,每次不同</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$C_NONCE</span>     <span style="color: #339933;">=</span> <span style="color: #0000ff;">'AAB3238922BCC25A6F606EB525FFDC56'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 是随机的，但是固定值也没关系</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$SSIC</span>        <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// cookie中提取的变量</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$RESPONSE</span>    <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 加密后的密钥串</span>
&nbsp;
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$url_nav</span>            <span style="color: #339933;">=</span> <span style="color: #0000ff;">'https://nav.fetion.com.cn/nav/getsystemconfig.aspx'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 443端口获取导航信息</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$domain_fetion</span>      <span style="color: #339933;">=</span> <span style="color: #0000ff;">'fetion.com.cn'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 飞信服务器的域名</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$SIPC_PROXY</span>         <span style="color: #339933;">=</span> <span style="color: #0000ff;">'221.176.31.4:8080'</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//  8080端口飞信通讯占用 </span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$SSI_PROXY_SIGN_IN</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 登录URL</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$SSI_PROXY_SIGH_OUT</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://ssi.fetion.com.cn/ssiportal/SSIAppSignOut.aspx'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 登出URL</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$proxy_http</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'proxy.example.com:8080'</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// HTTP代理服务器地址</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$curl</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span> <span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$socket</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span> <span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *从导航网站获取信息
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_CONFIG</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;config&gt;&lt;user mobile-no=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;client type=<span style="color: #000099; font-weight: bold;">\&quot;</span>PC<span style="color: #000099; font-weight: bold;">\&quot;</span> version=<span style="color: #000099; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #000099; font-weight: bold;">\&quot;</span> platform=<span style="color: #000099; font-weight: bold;">\&quot;</span>W5.1<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;servers version=<span style="color: #000099; font-weight: bold;">\&quot;</span>0<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;service-no version=<span style="color: #000099; font-weight: bold;">\&quot;</span>12<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;parameters version=<span style="color: #000099; font-weight: bold;">\&quot;</span>15<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;hints version=<span style="color: #000099; font-weight: bold;">\&quot;</span>13<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;http-applications version=<span style="color: #000099; font-weight: bold;">\&quot;</span>14<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;client-config version=<span style="color: #000099; font-weight: bold;">\&quot;</span>17<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;/config&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *使用手机号码和密码向服务器获取对应的飞信号码信息
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SSI_SIGN</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;mobileno=<span style="color: #009933; font-weight: bold;">%s</span>&amp;pwd=<span style="color: #009933; font-weight: bold;">%s</span>&quot;</span> <span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *使用飞信号码向SIPC服务器注册，获取临时变量NONCE和SSIC的值
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_SIGN_NONCE</span>      <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;R <span style="color: #009933; font-weight: bold;">%s</span> SIP-C/2.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>F: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>I: 1<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Q: 1 R<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>L: <span style="color: #009933; font-weight: bold;">%d</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #009933; font-weight: bold;">%s</span>&quot;</span> <span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_SIGN_NONCE_BODY</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;args&gt;&lt;device type=<span style="color: #000099; font-weight: bold;">\&quot;</span>PC<span style="color: #000099; font-weight: bold;">\&quot;</span> version=<span style="color: #000099; font-weight: bold;">\&quot;</span>6<span style="color: #000099; font-weight: bold;">\&quot;</span> client-version=<span style="color: #000099; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;caps value=<span style="color: #000099; font-weight: bold;">\&quot;</span>simple-im;im-session;temp-group<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;events value=<span style="color: #000099; font-weight: bold;">\&quot;</span>contact;permission;system-message<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;user-info attributes=<span style="color: #000099; font-weight: bold;">\&quot;</span>all<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;presence&gt;&lt;basic value=<span style="color: #000099; font-weight: bold;">\&quot;</span>400<span style="color: #000099; font-weight: bold;">\&quot;</span> desc=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;/presence&gt;&lt;/args&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *使用飞信号码和加密的密码登录飞信SIPC服务器
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_LOGIN</span>           <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;R <span style="color: #009933; font-weight: bold;">%s</span> SIP-C/2.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>F: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>I: 1<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Q: 2 R<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>A: Digest response=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\&quot;</span>,cnonce=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>L: <span style="color: #009933; font-weight: bold;">%d</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_LOGIN_BODY</span>      <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;args&gt;&lt;device type=<span style="color: #000099; font-weight: bold;">\&quot;</span>PC<span style="color: #000099; font-weight: bold;">\&quot;</span> version=<span style="color: #000099; font-weight: bold;">\&quot;</span>6<span style="color: #000099; font-weight: bold;">\&quot;</span> client-version=<span style="color: #000099; font-weight: bold;">\&quot;</span>2.3.0230<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;caps value=<span style="color: #000099; font-weight: bold;">\&quot;</span>simple-im;im-session;temp-group<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;events value=<span style="color: #000099; font-weight: bold;">\&quot;</span>contact;permission;system-message<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;user-info attributes=<span style="color: #000099; font-weight: bold;">\&quot;</span>all<span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;presence&gt;&lt;basic value=<span style="color: #000099; font-weight: bold;">\&quot;</span>400<span style="color: #000099; font-weight: bold;">\&quot;</span> desc=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\&quot;</span> /&gt;&lt;/presence&gt;&lt;/args&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_SENDSMS</span>         <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;M <span style="color: #009933; font-weight: bold;">%s</span> SIP-C/2.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>F: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>I: 2<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Q: 1 M<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>T: tel:<span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>N: SendSMS<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>L: <span style="color: #009933; font-weight: bold;">%d</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$REQUEST_SIPC_LOGOUT</span>          <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;R <span style="color: #009933; font-weight: bold;">%s</span> SIP-C/2.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>F: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>I: 1 <span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Q: 3 R<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>X: 0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *@param $sender 短信发送者手机号
     *@param $passwd 短信发送者密码
     *@param $receiver 短信接收者手机号
     *@param $msg 短信内容
     **/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sender</span><span style="color: #339933;">,</span> <span style="color: #000088;">$passwd</span><span style="color: #339933;">,</span> <span style="color: #000088;">$receiver</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mobile_no</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$sender</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_pwd</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$passwd</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SMS_RECEIVER</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$receiver</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SMS_TEXT</span>     <span style="color: #339933;">=</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mobile_no</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span> <span style="color: #339933;">;</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionGetConfig</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 从导航网站443端口获取登录信息</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionSocektInit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 初始化到SIPC的8080端口socket连接</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionGetSIPCNonce</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 向服务器注册飞信号，获取关键变量值</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionLogin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    <span style="color: #666666; font-style: italic;">// 发送登录认证命令</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionSendSMS</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 发送短信发送命令</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionLogout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>        
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *从导航地址获取配置信息
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionGetConfig<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_CONFIG</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_CONFIG</span><span style="color: #339933;">,</span>
                                        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mobile_no</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">url_nav</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_SSL_VERIFYHOST<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_SSL_VERIFYPEER<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_COOKIEJAR<span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_CONFIG</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//curl_setopt($this-&gt;curl, CURLOPT_PROXY, $this-&gt;proxy_http); // 设置代理服务器</span>
        <span style="color: #000088;">$xml_config</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// 以下是从导航页面返回的XML里取相关信息</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test3.xml&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xml_config</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$xmlDom</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DOMDocument<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$xmlDom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadXML</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xml_config</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$fetion_server</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xmlDom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'servers'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$fetion_server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sipc-proxy'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nodeValue</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SSI_PROXY_SIGN_IN</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$fetion_server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ssi-app-sign-in'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nodeValue</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SSI_PROXY_SIGH_OUT</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$fetion_server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ssi-app-sign-out'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nodeValue</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SSI_PROXY_SIGN_IN</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// 以下获取手机号对应的飞信号</span>
        <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SSI_SIGN</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mobile_no</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_pwd</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SSI_PROXY_SIGN_IN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SSI_SIGN</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mobile_no</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_pwd</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$Result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">curl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test4.xml&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Result</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$xmlDom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadXML</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$uri</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xmlDom</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;user&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;uri&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//&quot;sip:738713940@fetion.com.cn;p=5914&quot;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^sip:(\d+)@(\S+);.*$/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$uri</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>        
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *初始化Fetion通讯Socket
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionSocektInit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_create</span><span style="color: #009900;">&#40;</span>AF_INET<span style="color: #339933;">,</span> SOCK_STREAM<span style="color: #339933;">,</span> SOL_TCP<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ip_fetion</span><span style="color: #339933;">,</span> <span style="color: #000088;">$port_fetion</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">':'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SIPC_PROXY</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// &quot;221.176.31.4:8080&quot;</span>
        <span style="color: #990000;">socket_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ip_fetion</span><span style="color: #339933;">,</span> <span style="color: #000088;">$port_fetion</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *注册飞信号码并获取临时变量NONCE和SSIC
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionGetSIPCNonce<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$REQUEST_SIPC_SIGN_NONCE</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_SIGN_NONCE</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span><span style="color: #339933;">,</span>
                                           <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span><span style="color: #339933;">,</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_SIGN_NONCE_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                                           <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_SIGN_NONCE_BODY</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$sock_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$REQUEST_SIPC_SIGN_NONCE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_read</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Line:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900; font-weight: bold;">__LINE__</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;socket_read() failed; reason: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">socket_last_error</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$regex_ssic</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/.*nonce=\&quot;(\\w+)\&quot;.*/s'</span> <span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$regex_ssic</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buf</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fetion Error: No nonce found in socket<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NONCE</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$regex_ssic</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/ssic\s+(.*)/s'</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$regex_ssic</span><span style="color: #339933;">,</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Fetion Error: No ssic found in cookie<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SSIC</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *登录飞信服务器
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">RESPONSE</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">FetionEncryptPassWD</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$REQUEST_SIPC_LOGIN</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_LOGIN</span><span style="color: #339933;">,</span>
                                      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span><span style="color: #339933;">,</span>
                                      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">RESPONSE</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">C_NONCE</span><span style="color: #339933;">,</span>
                                      <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_LOGIN_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                                      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_LOGIN_BODY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$sock_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$REQUEST_SIPC_LOGIN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_read</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Line:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900; font-weight: bold;">__LINE__</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;socket_read() failed; reason: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">socket_last_error</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/200/s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buf</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">True</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">False</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *发短信
     **/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> FetionSendSMS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//&quot;M %s SIP-C/2.0\r\nF: %s\r\nI: 2\r\nQ: 1 M\r\nT: tel:%s\r\nN: SendSMS\r\nL: %d\r\n\r\n%s&quot;;</span>
        <span style="color: #000088;">$REQUEST_SENDSMS</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_SENDSMS</span><span style="color: #339933;">,</span>
                                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span><span style="color: #339933;">,</span>
                                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SMS_RECEIVER</span><span style="color: #339933;">,</span>
                                   <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SMS_TEXT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SMS_TEXT</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$sock_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$REQUEST_SENDSMS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$buf</span> <span style="color: #339933;">=</span> <span style="color: #990000;">socket_read</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>Line:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900; font-weight: bold;">__LINE__</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; socket_read() failed; reason: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">socket_strerror</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">socket_last_error</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/200/s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$buf</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">True</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">False</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *登出飞信服务器
     **/</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionLogout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//string Logout = String.Format(FETION_SIPC_LOGOUT, FETION_DOMAIN_URL, Fetion_Number);</span>
        <span style="color: #000088;">$FETION_SIPC_LOGOUT</span>   <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;R <span style="color: #009933; font-weight: bold;">%s</span> SIP-C/2.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>F: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>I: 1 <span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>Q: 3 R<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>X: 0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$REQUEST_SIPC_LOGOUT</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">REQUEST_SIPC_LOGOUT</span><span style="color: #339933;">,</span>
                                       <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span><span style="color: #339933;">,</span>
                                       <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
        <span style="color: #990000;">socket_write</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #339933;">,</span> <span style="color: #000088;">$REQUEST_SIPC_LOGOUT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">socket_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">socket</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>        
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *生成加密串,感谢CSND ycTIN的帮助！
     *@return string 加密的密码串     *
     **/</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> FetionEncryptPassWD<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_pwd</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$h1</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NONCE</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">C_NONCE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$h2</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;REGISTER:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetion_no</span> <span style="color: #339933;">;</span>
        <span style="color: #000088;">$h2</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$h2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$h1</span>:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NONCE</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$h2</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$response</span> <span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     *打印一下临时变量
     **/</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> printVar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>CNONCE:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">C_NONCE</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>Domain:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">domain_fetion</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>NONCE:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NONCE</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>RESPONSE:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">RESPONSE</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __destruct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//$this-&gt;FetionLogout() ;</span>
        <span style="color: #339933;">@</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 删除cookie文件</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$myNewFetion</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> myFetion<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'13811111111'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'13822222222'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'飞信测试'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//$myNewFetion-&gt;printVar() ;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>　　 为方便大家测试，这里提供一个<a href="http://i.isclab.org/tools/fetion.php">飞信发送测试URL</a>。本人只能承诺不留存密码，信不信只能看测试者了。<br />
附测试过程中XML截图1：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/CMCC-飞信发送-PHP类-导航信息.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/CMCC-飞信发送-PHP类-导航信息-300x112.png" alt="" title="CMCC-飞信发送-PHP类-导航信息" width="300" height="112" class="alignnone size-medium wp-image-44" /></a></p>
<p>测试过程中XML截图2：<br />
<a href="http://i.isclab.org/wp-content/uploads/2010/02/CMCC-飞信发送-PHP类-用户配置信息.png"><img src="http://i.isclab.org/wp-content/uploads/2010/02/CMCC-飞信发送-PHP类-用户配置信息-300x39.png" alt="" title="CMCC-飞信发送-PHP类-用户配置信息" width="300" height="39" class="alignnone size-medium wp-image-45" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【转载】《软件随想录》：Joel Spolsky对计算机学生的七大建议</title>
		<link>http://i.isclab.org/?p=38</link>
		<comments>http://i.isclab.org/?p=38#comments</comments>
		<pubDate>Fri, 29 Jan 2010 02:29:38 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=38</guid>
		<description><![CDATA[From:http://www.programmer.com.cn/1798/
作者：Joel Spolsky
[编者按]由于Joel Spolsky的双重身份（昔日耶鲁大学计算机系学长，今日Fog Creek软件公司的CEO），所以听听他的建议，对于当今无数困扰于就业 压力的中国高校计算机专业学子来说，是大有裨益的。你们会发现，大多数建议，都在强调“软实力”的价值。本文转载自《软件随想录》(作者：Joel Spolsky ，译者: 阮一峰，2009年12月出版)，感谢北京图灵文化发展有限公司的支持。
如果你喜欢编程，那么你真是受到了上天的眷顾。你是非常幸运的少数人之一，能够以自己喜欢的事谋生。大多数人没有这么幸运。你 认为理所当然的观念“热爱你的工作”，其实是一个很现代的概念。通常的看法是，工 作是一种让人很不开心的事，你为了拿工资才不得不去上班。你工作的目的是为了攒下钱去干那些自己真正喜欢干的事，但是前提是你得等到65岁退休之后才行，而且还有不少条件。条件一，你的积蓄必须足够多；条件二，你没有老到走不动，你还有 体力去干那些事情；条件三，你喜欢的事情不需要用到脆弱的膝盖、昏花的视力，也不要求你走上一里地不喘气，等等。
我刚才说到哪里了？对了，我要提建议。
毕业前练好写作
如果不是Linus Torvalds不断地散布福音，请问Linux操作系统会成功吗？虽然 他是一个非常聪明的计算机天才，但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过电子邮件和邮件列表用书面形式传播自己的想法，最终引起了所有人的注意。
你听说过现在风靡一时的“极限编程[ ] ”（Extreme Programming）吗？我在这个地方不谈我对极限编程的看法，我只说如果你听过这个词，那么原因就是它的倡导者都是一 些非常有才华的作家和演说家。
即使我们缩小范围，将目光局限在任何一个软件开发团体中，你也会发现该团体中最有权势和影响力的程序员正是那些表达能力强的程 序员，他们无论是做书面表达还是做口头表达，都能够清晰、自如、具有说服力地传达观点。此外，长得高也有助于提升影响力，不过这个不取决于你。
一个普通程序员与一个优秀程序员的区别，不在于他们懂得的编程语言谁多谁少，也不在于他们喜欢用Python语言还是喜欢用Java语言，而在于他们能否与他人交流思想。 如果你能说服其他人，你的力量就可以得到放大。如果你能写出清晰的注释和技术规格说明书，其他程序员就能够理解你的代码，因此他们就能在自己的代码中使 用，而不必重写。如果你做不到这一点，你的代码对其他人就没有价值。如果你能为最终用户写出清晰的使用手册，其他人就能明白你的代码是用来干什么的，这是 唯一让别人明白你的代码有何价值的方法。SourceForge[ ]上有许多优美 的、有用的代码，但是它们都像被埋葬了一样，根本没人来用，原因就是它们的作者没有写好使用说明（或者压根就没写）。这样一来就没有人知道他们的成果，他 们杰出的代码就衰亡了。
如果一个程序员不会用英语写作、没有良好的写作能力，我就不会雇他。如果你能写，不管你去哪家公司工作，你很快就会发现写作技 术文档的任务会落到你头上，这意味着你已经开始在放大自己的影响力了，管理层正在注意到你。
大学里有些课程被公认为“写作密集型”（writing intensive）课程，这就是说为了拿到学分，你必须写作多得可怕的文字。一定要去上这样的课程！不要管学科，只要 这门课每周甚至每天都要你写东西，你就去上。
你还可以动手写日记或者网志。你写得越多，写作就会变得越容易。写起来越容易，你就会写得越多。这是一个良性循环。
毕业前学好C语言
第二点我要讲的是C语言。请注意，我说的是C语言，而不是C++。虽然在实际使用中C语言已经越来越罕见，但是它仍然是当前程序 员的共同语言。C语言让程序员互相沟通，更重要的是，它比你在大学中学到的“现代语言”（比如ML语言、Java语言、Python语言或者其它正在教授的流行垃圾语言）都更 接近机器。你至少需要花一个学期来了解机器原理，否则你永远不可能在高级语言的层次写出高效的代码。你也永远无法开发编译器和操作系统，而它们恰恰属于目 前程序员能够得到的最佳工作之列。别人也永远不会放心将大型项目的架构设计交给你。我不管你懂多少延续（continuation）、闭包（closure）、异常处理（exception handling），只要你不能解释为什么while (*s++ = *t++)；这句代码的作用是复制字符串，或者不觉得这是世界上对你来说再自然不过的事情，那么你就是在盲目无知的情况下编程。在我看来，这就好像一个医 生不懂得最基本的解剖学就在开处方，他看病的根据完全是因为那些娃娃脸的医药厂商销售代表说这种药有用。
毕业前学好微观经济学
如果你没有上过任何经济学课程，那么我首先来做一个超短的评论：经济学是这样的学科之一，刚开始学的时候轰轰烈烈，有许多有用 的、言之有理的理论和可以在真实世界中得到证明的事实，等等；但是，再学下去就每况愈下，有用的东西就不多了。经济学一开始那个有用的部分正是微观经济 学，它是商业领域所有重要理论的基础。跟在微观经济学后面的东西就不行了。你接下来学的是宏观经济学，如果你愿意，尽管跳过去，也不会有什么损失。宏观经 济学开头的部分是利息理论，内容比方说是利率与失业之间的关系，但是怎么说呢，看上去这部分里面还没有被证实的东西多于已经被证实的东西。学完这部分，后 面的内容越来越糟糕，许多经济学专业的学生实际上都变成在搞物理学，因为这样才能在华尔街上找到更好的工作。但是不管怎样，你一定要去学微观经济学，因为 你必须搞懂供给和需求，你必须明白竞争优势，你必须理解什么是净现值（NPV），什么是贴现，什么是边际效用。只有这样，你才 会懂得为什么生意是现在这种做法。
为什么计算机系的学生也应该学经济学？因为，从经营一家公司的角度来看，比起那些不懂的程序员，一个理解基本商业规则的程序员 将会更有价值。就是这么简单。我无法告诉你有多少次我是那样地充满挫折感，因为我看到了太多的提出一些疯狂的想法的程序员，这些想法在代码上也许可行，但 在资本主义世界中毫无意义。如果你懂得商业规则，你就是一个更有价值的程序员，你会因此得到回报的，但是前提是你要去学习微观经济学。
不要因为枯燥就不选修非计算机专业的课程。
想提高GPA绩点的一个好方法就是多选修非计算机系的课程。请千万不要低估你的GPA的重大意义。千千万万的人事经理和招聘人员在拿到一份简历的时候，第一眼就会去看GPA，包括我也是这样。我们不会为这种做法道歉。为什么？因为GPA不反映单个的成绩，而是代表了许多个教授在一段很长的时间中，在不同的情况下，对你的表现的一个总的 评估。SAT成绩难道不够吗？哈，那只不过是一场几个小时的测试罢了。GPA中包括了四年大学期间你的小论文、期中考试和课堂表现，总数有几百次之多。当然，GPA也有自己的问题，不是百分之百准确。比如，这些年来，老师对学生的打分越来越宽松，学习成绩有通货膨 胀的趋势。再比如，GPA无法反映课程的难度，没人能够看出你的GPA是来自无名社区大学家政系的轻松课程还是来自加州理工学院针对研究生的量子力学课程。渐渐地，我形成 了一套自己的做法，首先我会过滤掉所有来自社区大学、GPA低于2.5的简历，然后我会要求剩下的人给我寄成绩单和推荐信。我再从中发现那些成绩一贯优秀的人，而不是那些 仅仅在计算机系课程中得到高分的人。
为什么我要关心某人的“欧洲历史”课程成绩呢，毕竟作为雇主我要找的应该是程序员啊？ 何况，历史是那么枯燥，不得高分很正常。哦，这么说来，你的意思是我应该雇用你，而不用考虑一旦工作变得枯燥你会不会努力工作？别忘了，在编程工作中也有 很枯燥的东西。每一项工作都有枯燥难耐的时刻。我不想雇用那些只想干有趣事情的人。
选修有大量编程实践的课程
我依然清楚记得我发誓绝不读研究生的那一刻。那是在一门叫做“动态逻辑”的课程上，教师是活力十足的耶鲁大学教授Lenore Zuck，她是计算机系那些聪明的老师中 最聪明的人之一。
如今， 由于记忆力糟糕， 我已经差不多把这门课的内容忘光了，但是不管怎么说，在这里我还是想要对付着说一下。大致上，形式 逻辑的意思是说，如果条件成立，你就能证明结论也成立。比如，根据形式逻辑，已知“只要成绩好，就能被雇用”，然后假定“Johnny的成绩好”，你就可以得到一个崭新的结论“Johnny会被雇用”。这完全是经典方法。但是，一个解构主义者（deconstructionist）只需要10秒钟就能破坏形式逻辑中所有有用的东西。这样一来， 留给你的只是一些趣味性，而不是实用性。
现在再来说动态逻辑。它与形式逻辑其实是一回事，但是必须再多考虑时间因素。比如，“你打开灯之后，就能看见自己的鞋子”，已知“灯以前是亮的”，那么这就意味着“你看见了自己的鞋子”。
对于像Zuck教授那样聪明的理论家，动态逻辑充满了吸引力，因为它看上去很有希望让你在形式上证明一些计算机程 序的相关理论问题。这样做说不定很有用。比如，你可以用它在形式上证明，火星漫游车的闪存卡不会发生溢出（overflow）问题，不会因而整天一遍又一遍地重启，耽误了它在那颗赤红色的星球上漫游寻找火星人马文（Marvin the Martian）。
在第一堂课上，Zuck博士写满了整整两面黑板，甚至黑板旁边的墙上都写上了很多证明步骤。需要证明的问题是，有一个控制 灯泡的开关，现在灯泡没有亮，这时你打开了开关，请证明灯泡将会点亮。
整个证明过程复杂得不可思议，处处都是陷阱，必须十分小心。保证这个证明不出错太困难了，还不如直接相信打开开关灯就会亮。真 的，虽然证明过程写满了许多块黑板，但是还是有许多中间步骤被省略了，因为如果要从形式逻辑上完整证明所有步骤，那就琐碎得无法形容了。许多步骤是用各种 经典的逻辑证明方法推导得到的，包括归纳法、反证法等，甚至有些部分还是由旁听的研究生证明的。
留给我们的课后作业是证明逆命题：如果灯原来是关着的，现在却亮了，那么请证明开关的状态一定同原来相反。
我动手开始证明，我真的去证明了。
我在图书馆里待了很长时间。
我对照着Zuck博士的原始证明想依样画葫芦。研究了几个小时之后，我在其中发现了一个错误。可能我抄写的时候抄错 了，但是这使得我想通了一件事。如果花费3个小时，写满了一块又一块的黑板，每一秒钟都可能出错，最后能够证明的却只是一个很琐碎的结论，那 么这种方式有多大的实用性呢？在活生生、充满趣味的现实世界中，你永远都不会有机会使用它。
但是，动态逻辑的理论家们对这一点不感兴趣。他们看上它不是因为它有用，而是因为它可以为他们带来终身教职。
我放弃了这门课，并且发誓绝不会去读计算机科学的研究生。
这个故事告诉我们，计算机科学与软件开发不是一回事。如果你真的非常幸运，你的学校可能会开设很像样的软件开发课程。但是另一 种可能是，你的学校根本不教你在现实中如何编程，因为精英学校都觉得，教授工作技能最好留给职业技术学校、犯人重返社会的培训项目去做。你到处都能学怎么 写代码。别忘了，我们是耶鲁大学，我们的使命是培养未来的世界领袖。你交了16万美元的学费，却在学循环语句的写法，这怎么可以？ 你以为这是什么地方，难道是机场沿途的酒店里临时拼凑起来不靠谱的Java语言培训班？哼哼。
麻烦在于我们没有一种真正教授软件开发的专门学校。你如果想成为一个程序员，你可能只能选择计算机科学专业。这是一个不错的专 业，但是它同软件开发不是一回事。在那些400等级的课程代号中，去寻找名称中带有“Practicum”这个词的课程吧（编者注：指供人实习的课程）。不要被这个拉丁语单词吓倒，这些都是有用的课程，之所 以起这种名字，只是为了让那些文绉绉、装腔作势、满嘴胡说八道的公司经理们觉得高深莫测。
别担心所有工作都被印度人抢走
我首先要说的是，如果你本身就已经在印度了，或者你就是印度人，那么你真的毫无必要去想这件事，根本不用琢磨所有的工作机会是 不是都跑到了印度。那些都是非常好的工作，好好地享受吧，祝你身体健康。
但是，我不断听说计算机系的入学人数下降得很厉害，已经到了危险的程度。根据我听到的说法，其中的一个原因是“学生们不愿去学一个工作机会都流向印度的专业”。这种担心大错特错，有很多理由可以反驳。首先，根据 一时性的商业潮流决定个人的职业选择，这是愚蠢的。其次，即使编程工作无一幸存地都流向了印度和中国，但是学习编程本身依然是一种第一流的素质训练，可以 为各种超级有趣的工作打下基础，比如业务流程工程（business process engineering）。再次，不管是在美国还是在印度，真正优秀的程序员依然是非常非常短缺的，这一点请相信我。不错，确实有相当一批失业的IT从业者在那里鼓噪，抱怨他们长时间找不到工作，但是你知道吗？即使冒着触怒这些人的风险，我还是要 说，真正优秀的程序员根本不会失业。最后，你还能找到更好的专业吗？你觉得什么专业好？主修历史学？如果那样，你毕业的时候就会发现，根本没有其他选择， 只能去法学院。不过我倒是知道一件事：99%的律师都痛恨他们的工作，痛恨他们当律师的每一分钟。可是，律师每周的工作时间偏偏长达90小时。就像我前面说过的：如果你喜欢编程，那么你真是受到了上天的眷顾。你是非常幸运的少数人之一， [...]]]></description>
			<content:encoded><![CDATA[<p>From:http://www.programmer.com.cn/1798/</p>
<p>作者：Joel Spolsky</p>
<p><em>[编者按]由于Joel Spolsky的双重身份（昔日耶鲁大学计算机系学长，今日Fog Creek软件公司的CEO），所以听听他的建议，对于当今无数困扰于就业 压力的中国高校计算机专业学子来说，是大有裨益的。你们会发现，大多数建议，都在强调“软实力”的价值。本文转载自《软件随想录》(作者：Joel Spolsky ，译者: 阮一峰，2009年12月出版)，感谢北京图灵文化发展有限公司的支持。</em></p>
<p>如果你喜欢编程，那么你真是受到了上天的眷顾。你是非常幸运的少数人之一，能够以自己喜欢的事谋生。大多数人没有这么幸运。你 认为理所当然的观念“热爱你的工作”，其实是一个很现代的概念。通常的看法是，工 作是一种让人很不开心的事，你为了拿工资才不得不去上班。你工作的目的是为了攒下钱去干那些自己真正喜欢干的事，但是前提是你得等到65岁退休之后才行，而且还有不少条件。条件一，你的积蓄必须足够多；条件二，你没有老到走不动，你还有 体力去干那些事情；条件三，你喜欢的事情不需要用到脆弱的膝盖、昏花的视力，也不要求你走上一里地不喘气，等等。</p>
<p>我刚才说到哪里了？对了，我要提建议。<span id="more-38"></span></p>
<p><strong>毕业前练好写作</strong></p>
<p>如果不是Linus Torvalds不断地散布福音，请问Linux操作系统会成功吗？虽然 他是一个非常聪明的计算机天才，但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过电子邮件和邮件列表用书面形式传播自己的想法，最终引起了所有人的注意。</p>
<p>你听说过现在风靡一时的“极限编程[ ] ”（Extreme Programming）吗？我在这个地方不谈我对极限编程的看法，我只说如果你听过这个词，那么原因就是它的倡导者都是一 些非常有才华的作家和演说家。</p>
<p>即使我们缩小范围，将目光局限在任何一个软件开发团体中，你也会发现该团体中最有权势和影响力的程序员正是那些表达能力强的程 序员，他们无论是做书面表达还是做口头表达，都能够清晰、自如、具有说服力地传达观点。此外，长得高也有助于提升影响力，不过这个不取决于你。</p>
<p>一个普通程序员与一个优秀程序员的区别，不在于他们懂得的编程语言谁多谁少，也不在于他们喜欢用Python语言还是喜欢用Java语言，而在于他们能否与他人交流思想。 如果你能说服其他人，你的力量就可以得到放大。如果你能写出清晰的注释和技术规格说明书，其他程序员就能够理解你的代码，因此他们就能在自己的代码中使 用，而不必重写。如果你做不到这一点，你的代码对其他人就没有价值。如果你能为最终用户写出清晰的使用手册，其他人就能明白你的代码是用来干什么的，这是 唯一让别人明白你的代码有何价值的方法。SourceForge[ ]上有许多优美 的、有用的代码，但是它们都像被埋葬了一样，根本没人来用，原因就是它们的作者没有写好使用说明（或者压根就没写）。这样一来就没有人知道他们的成果，他 们杰出的代码就衰亡了。</p>
<p>如果一个程序员不会用英语写作、没有良好的写作能力，我就不会雇他。如果你能写，不管你去哪家公司工作，你很快就会发现写作技 术文档的任务会落到你头上，这意味着你已经开始在放大自己的影响力了，管理层正在注意到你。</p>
<p>大学里有些课程被公认为“写作密集型”（writing intensive）课程，这就是说为了拿到学分，你必须写作多得可怕的文字。一定要去上这样的课程！不要管学科，只要 这门课每周甚至每天都要你写东西，你就去上。</p>
<p>你还可以动手写日记或者网志。你写得越多，写作就会变得越容易。写起来越容易，你就会写得越多。这是一个良性循环。</p>
<p><strong>毕业前学好C语言</strong></p>
<p>第二点我要讲的是C语言。请注意，我说的是C语言，而不是C++。虽然在实际使用中C语言已经越来越罕见，但是它仍然是当前程序 员的共同语言。C语言让程序员互相沟通，更重要的是，它比你在大学中学到的“现代语言”（比如ML语言、Java语言、Python语言或者其它正在教授的流行垃圾语言）都更 接近机器。你至少需要花一个学期来了解机器原理，否则你永远不可能在高级语言的层次写出高效的代码。你也永远无法开发编译器和操作系统，而它们恰恰属于目 前程序员能够得到的最佳工作之列。别人也永远不会放心将大型项目的架构设计交给你。我不管你懂多少延续（continuation）、闭包（closure）、异常处理（exception handling），只要你不能解释为什么while (*s++ = *t++)；这句代码的作用是复制字符串，或者不觉得这是世界上对你来说再自然不过的事情，那么你就是在盲目无知的情况下编程。在我看来，这就好像一个医 生不懂得最基本的解剖学就在开处方，他看病的根据完全是因为那些娃娃脸的医药厂商销售代表说这种药有用。</p>
<p><strong>毕业前学好微观经济学</strong></p>
<p>如果你没有上过任何经济学课程，那么我首先来做一个超短的评论：经济学是这样的学科之一，刚开始学的时候轰轰烈烈，有许多有用 的、言之有理的理论和可以在真实世界中得到证明的事实，等等；但是，再学下去就每况愈下，有用的东西就不多了。经济学一开始那个有用的部分正是微观经济 学，它是商业领域所有重要理论的基础。跟在微观经济学后面的东西就不行了。你接下来学的是宏观经济学，如果你愿意，尽管跳过去，也不会有什么损失。宏观经 济学开头的部分是利息理论，内容比方说是利率与失业之间的关系，但是怎么说呢，看上去这部分里面还没有被证实的东西多于已经被证实的东西。学完这部分，后 面的内容越来越糟糕，许多经济学专业的学生实际上都变成在搞物理学，因为这样才能在华尔街上找到更好的工作。但是不管怎样，你一定要去学微观经济学，因为 你必须搞懂供给和需求，你必须明白竞争优势，你必须理解什么是净现值（NPV），什么是贴现，什么是边际效用。只有这样，你才 会懂得为什么生意是现在这种做法。</p>
<p>为什么计算机系的学生也应该学经济学？因为，从经营一家公司的角度来看，比起那些不懂的程序员，一个理解基本商业规则的程序员 将会更有价值。就是这么简单。我无法告诉你有多少次我是那样地充满挫折感，因为我看到了太多的提出一些疯狂的想法的程序员，这些想法在代码上也许可行，但 在资本主义世界中毫无意义。如果你懂得商业规则，你就是一个更有价值的程序员，你会因此得到回报的，但是前提是你要去学习微观经济学。</p>
<p><strong>不要因为枯燥就不选修非计算机专业的课程。</strong></p>
<p>想提高GPA绩点的一个好方法就是多选修非计算机系的课程。请千万不要低估你的GPA的重大意义。千千万万的人事经理和招聘人员在拿到一份简历的时候，第一眼就会去看GPA，包括我也是这样。我们不会为这种做法道歉。为什么？因为GPA不反映单个的成绩，而是代表了许多个教授在一段很长的时间中，在不同的情况下，对你的表现的一个总的 评估。SAT成绩难道不够吗？哈，那只不过是一场几个小时的测试罢了。GPA中包括了四年大学期间你的小论文、期中考试和课堂表现，总数有几百次之多。当然，GPA也有自己的问题，不是百分之百准确。比如，这些年来，老师对学生的打分越来越宽松，学习成绩有通货膨 胀的趋势。再比如，GPA无法反映课程的难度，没人能够看出你的GPA是来自无名社区大学家政系的轻松课程还是来自加州理工学院针对研究生的量子力学课程。渐渐地，我形成 了一套自己的做法，首先我会过滤掉所有来自社区大学、GPA低于2.5的简历，然后我会要求剩下的人给我寄成绩单和推荐信。我再从中发现那些成绩一贯优秀的人，而不是那些 仅仅在计算机系课程中得到高分的人。</p>
<p>为什么我要关心某人的“欧洲历史”课程成绩呢，毕竟作为雇主我要找的应该是程序员啊？ 何况，历史是那么枯燥，不得高分很正常。哦，这么说来，你的意思是我应该雇用你，而不用考虑一旦工作变得枯燥你会不会努力工作？别忘了，在编程工作中也有 很枯燥的东西。每一项工作都有枯燥难耐的时刻。我不想雇用那些只想干有趣事情的人。</p>
<p><strong>选修有大量编程实践的课程</strong></p>
<p>我依然清楚记得我发誓绝不读研究生的那一刻。那是在一门叫做“动态逻辑”的课程上，教师是活力十足的耶鲁大学教授Lenore Zuck，她是计算机系那些聪明的老师中 最聪明的人之一。</p>
<p>如今， 由于记忆力糟糕， 我已经差不多把这门课的内容忘光了，但是不管怎么说，在这里我还是想要对付着说一下。大致上，形式 逻辑的意思是说，如果条件成立，你就能证明结论也成立。比如，根据形式逻辑，已知“只要成绩好，就能被雇用”，然后假定“Johnny的成绩好”，你就可以得到一个崭新的结论“Johnny会被雇用”。这完全是经典方法。但是，一个解构主义者（deconstructionist）只需要10秒钟就能破坏形式逻辑中所有有用的东西。这样一来， 留给你的只是一些趣味性，而不是实用性。</p>
<p>现在再来说动态逻辑。它与形式逻辑其实是一回事，但是必须再多考虑时间因素。比如，“你打开灯之后，就能看见自己的鞋子”，已知“灯以前是亮的”，那么这就意味着“你看见了自己的鞋子”。</p>
<p>对于像Zuck教授那样聪明的理论家，动态逻辑充满了吸引力，因为它看上去很有希望让你在形式上证明一些计算机程 序的相关理论问题。这样做说不定很有用。比如，你可以用它在形式上证明，火星漫游车的闪存卡不会发生溢出（overflow）问题，不会因而整天一遍又一遍地重启，耽误了它在那颗赤红色的星球上漫游寻找火星人马文（Marvin the Martian）。</p>
<p>在第一堂课上，Zuck博士写满了整整两面黑板，甚至黑板旁边的墙上都写上了很多证明步骤。需要证明的问题是，有一个控制 灯泡的开关，现在灯泡没有亮，这时你打开了开关，请证明灯泡将会点亮。</p>
<p>整个证明过程复杂得不可思议，处处都是陷阱，必须十分小心。保证这个证明不出错太困难了，还不如直接相信打开开关灯就会亮。真 的，虽然证明过程写满了许多块黑板，但是还是有许多中间步骤被省略了，因为如果要从形式逻辑上完整证明所有步骤，那就琐碎得无法形容了。许多步骤是用各种 经典的逻辑证明方法推导得到的，包括归纳法、反证法等，甚至有些部分还是由旁听的研究生证明的。</p>
<p>留给我们的课后作业是证明逆命题：如果灯原来是关着的，现在却亮了，那么请证明开关的状态一定同原来相反。</p>
<p>我动手开始证明，我真的去证明了。</p>
<p>我在图书馆里待了很长时间。</p>
<p>我对照着Zuck博士的原始证明想依样画葫芦。研究了几个小时之后，我在其中发现了一个错误。可能我抄写的时候抄错 了，但是这使得我想通了一件事。如果花费3个小时，写满了一块又一块的黑板，每一秒钟都可能出错，最后能够证明的却只是一个很琐碎的结论，那 么这种方式有多大的实用性呢？在活生生、充满趣味的现实世界中，你永远都不会有机会使用它。</p>
<p>但是，动态逻辑的理论家们对这一点不感兴趣。他们看上它不是因为它有用，而是因为它可以为他们带来终身教职。</p>
<p>我放弃了这门课，并且发誓绝不会去读计算机科学的研究生。</p>
<p>这个故事告诉我们，计算机科学与软件开发不是一回事。如果你真的非常幸运，你的学校可能会开设很像样的软件开发课程。但是另一 种可能是，你的学校根本不教你在现实中如何编程，因为精英学校都觉得，教授工作技能最好留给职业技术学校、犯人重返社会的培训项目去做。你到处都能学怎么 写代码。别忘了，我们是耶鲁大学，我们的使命是培养未来的世界领袖。你交了16万美元的学费，却在学循环语句的写法，这怎么可以？ 你以为这是什么地方，难道是机场沿途的酒店里临时拼凑起来不靠谱的Java语言培训班？哼哼。</p>
<p>麻烦在于我们没有一种真正教授软件开发的专门学校。你如果想成为一个程序员，你可能只能选择计算机科学专业。这是一个不错的专 业，但是它同软件开发不是一回事。在那些400等级的课程代号中，去寻找名称中带有“Practicum”这个词的课程吧（编者注：指供人实习的课程）。不要被这个拉丁语单词吓倒，这些都是有用的课程，之所 以起这种名字，只是为了让那些文绉绉、装腔作势、满嘴胡说八道的公司经理们觉得高深莫测。</p>
<p><strong>别担心所有工作都被印度人抢走</strong></p>
<p>我首先要说的是，如果你本身就已经在印度了，或者你就是印度人，那么你真的毫无必要去想这件事，根本不用琢磨所有的工作机会是 不是都跑到了印度。那些都是非常好的工作，好好地享受吧，祝你身体健康。</p>
<p>但是，我不断听说计算机系的入学人数下降得很厉害，已经到了危险的程度。根据我听到的说法，其中的一个原因是“学生们不愿去学一个工作机会都流向印度的专业”。这种担心大错特错，有很多理由可以反驳。首先，根据 一时性的商业潮流决定个人的职业选择，这是愚蠢的。其次，即使编程工作无一幸存地都流向了印度和中国，但是学习编程本身依然是一种第一流的素质训练，可以 为各种超级有趣的工作打下基础，比如业务流程工程（business process engineering）。再次，不管是在美国还是在印度，真正优秀的程序员依然是非常非常短缺的，这一点请相信我。不错，确实有相当一批失业的IT从业者在那里鼓噪，抱怨他们长时间找不到工作，但是你知道吗？即使冒着触怒这些人的风险，我还是要 说，真正优秀的程序员根本不会失业。最后，你还能找到更好的专业吗？你觉得什么专业好？主修历史学？如果那样，你毕业的时候就会发现，根本没有其他选择， 只能去法学院。不过我倒是知道一件事：99%的律师都痛恨他们的工作，痛恨他们当律师的每一分钟。可是，律师每周的工作时间偏偏长达90小时。就像我前面说过的：如果你喜欢编程，那么你真是受到了上天的眷顾。你是非常幸运的少数人之一， 能够以自己喜欢的事谋生。</p>
<p>不过说实话，我不觉得学生们真的有上面的想法。近年来，计算机系入学人数的下降只是回到了历史上的正常水平，因为前些年的互联 网狂热使得入学人数出现了大泡沫，抬高了基数。由于这种泡沫，许多并不真的喜欢编程的人也来读计算机系。他们心里想的是，只要进了计算机系，将来就能找到 诱人的高薪工作，就能获得24岁当上CEO、进行IPO的机会。谢天谢地，这些人现在都离计算机系远远的了。</p>
<p><strong>找一份好的暑期实习工作</strong></p>
<p>精明的招聘负责人都知道，喜欢编程的人高中时就将牙医的信息输入了数据库，进入大学前就去过三次电脑夏令营，为校报做过内容管 理系统，有过软件公司的夏季实习经历。招聘负责人就是要在你的简历上找这些东西。</p>
<p>如果你喜欢编程， 就不要随便什么工作都答应，否则你会犯下最大的错误。不管是暑期工作，还是兼职或者其他性质的工作，只要与 编程无关，就不要轻易接受。我知道，其他19岁的孩子都想去购物中心里打工，在那里折叠衬衫。但是你与他们不同，你19岁时就已经掌握了一门非常有价值的技能。将时间浪费在折叠衬衫上是很愚蠢的，等到毕业的时候，你的简历上本应该写满了一大堆与编程相关的经 历。就让那些财经类的毕业生去租车公司“帮助人们满足他们租车的需要”吧，你要干的是别的事（在电视中 扮演超人的Tom Welling注1除外）。</p>
<p>为了让你的生活变得更容易一些，也为了强调这整篇文章完全是为了满足我的个人目的，我要告诉你，我的公司——Fog Creek软件公司——提供软件开发方面的暑期实习机会。我们非常看重简 历。“比起其他公司的实习工作，你在Fog Creek最有可能学到更 多的编写代码、软件开发、商业运作方面的知识。”这是去年夏天我们的一个实习生Ben说的。他会这样说，并不完 全是因为我派了人到他的宿舍让他这样说。我们接受实习申请的截止日期是2月1日。一起来吧。</p>
<p>如果你听从了我的建议，你还是有可能落得一个悲惨的下场，比如很早 就卖掉了微软公司的股票，再比如拒绝了谷歌公司的工作机会，原因是你想要一间自己的可以关上门的独立办公室，或者做出了其他生命中愚蠢的决定。但是，这些 可不是我的错。我一开始就告诉过你，不要听我的话。</p>
<p>(注1 ： T o m W e l l i n g是一个美国演员， 在电视剧《超人前传》（Smallville）中扮演超人。该电视剧讲述还没有成长为后来超人的克拉克·肯特少年时代的故事。)</p>
<p>作者简介：</p>
<p>Joel Spolsky，世界最具影响的程序员网志Joel on Software的主人，软件业一位旗帜鲜明的思想者，一位传统软件管理理念的挑战者。他创办的这个网站被程序员誉 为“反呆伯特宣言书”，并被翻译为三十多种语言。Joel毕业于耶鲁大学，随后即进入微软公司工作，曾任微软公司E x c e l 开发小组项目经理。现在他在自己创办的Fog Creek软件公司任CEO。此外，他与人合办的Stack Overflow已经成为如今最热门的技术网站。</p>
<p>（本文来自《程序员》杂志2010年1月刊）</p>
<p>From:http://www.programmer.com.cn/1798/</p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=38</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】让FireFox3.6兼容支持腾讯邮箱中转站插件</title>
		<link>http://i.isclab.org/?p=30</link>
		<comments>http://i.isclab.org/?p=30#comments</comments>
		<pubDate>Thu, 28 Jan 2010 08:50:52 +0000</pubDate>
		<dc:creator>Laien</dc:creator>
				<category><![CDATA[OS & Software]]></category>

		<guid isPermaLink="false">http://i.isclab.org/?p=30</guid>
		<description><![CDATA[　　最近FireFox浏览器升级到3.6版本，据说启动速度快了很多。为了体验FF最新的功能，我也升级了一直在用的3.5。
　　整体感觉相当不错，启动速度快，界面清爽，定制方便。但唯一遗憾的原先一直使用的腾讯QQ邮箱中转站上传插件没法使用。重新安装该插件时，Firefox会提示插件不兼容。
　　这里有个简单的技巧可以让Firefox在插件安装过程中，跳过兼容性检查。操作方式如下：
　　1、在FireFox地址栏输入：“about:config”并回车；
　　2、跳过安全确认，进入配置界面；
　　3、在配置列表框中，右键，并依次选择【New】->【Boolean】；
　　4、新建一项属性值，名称：“extensions.checkCompatibility.3.6”，数值：“False”；
　　5、保存后，再次进入QQ邮箱中转站插件安装界面就可以正常安装！
 
]]></description>
			<content:encoded><![CDATA[<p>　　最近FireFox浏览器升级到3.6版本，据说启动速度快了很多。为了体验FF最新的功能，我也升级了一直在用的3.5。<br />
　　整体感觉相当不错，启动速度快，界面清爽，定制方便。但唯一遗憾的原先一直使用的腾讯QQ邮箱中转站上传插件没法使用。重新安装该插件时，Firefox会提示插件不兼容。<br />
　　这里有个简单的技巧可以让Firefox在插件安装过程中，跳过兼容性检查。操作方式如下：<br />
　　1、在FireFox地址栏输入：“<strong>about:config</strong>”并回车；<br />
　　2、跳过安全确认，进入配置界面；<br />
　　3、在配置列表框中，右键，并依次选择【New】->【Boolean】；<br />
　　4、新建一项属性值，名称：“extensions.checkCompatibility.3.6”，数值：“False”；<br />
　　5、保存后，再次进入QQ邮箱中转站插件安装界面就可以正常安装！</p>
<p><a href="http://i.isclab.org/wp-content/uploads/2010/01/firefox-3.6-extensions-checkCompatibility-for-Tencent-qqmail-plugin.png"><img src="http://i.isclab.org/wp-content/uploads/2010/01/firefox-3.6-extensions-checkCompatibility-for-Tencent-qqmail-plugin-300x172.png" alt="让Firfox3.6兼容支持腾讯QQ邮箱文件中转站插件" title="firefox-3.6-extensions-checkCompatibility-for-Tencent-qqmail-plugin" width="300" height="172" class="alignnone size-medium wp-image-32" /></a> </p>
]]></content:encoded>
			<wfw:commentRss>http://i.isclab.org/?feed=rss2&amp;p=30</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
