﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-听风流过-文章分类-嵌入式</title><link>http://www.blogjava.net/tingfeng/category/55375.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Feb 2021 20:28:29 GMT</lastBuildDate><pubDate>Tue, 09 Feb 2021 20:28:29 GMT</pubDate><ttl>60</ttl><item><title>基于http协议的post请求发送</title><link>http://www.blogjava.net/tingfeng/articles/433064.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Wed, 28 Feb 2018 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/433064.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/433064.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/433064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/433064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/433064.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、post请求的工具类2、线程池的封装类3、发送请求的接口类ps:数据结构的封装本文暂不涉及1、post请求的工具类Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;1&nbsp;package&nbsp;com.utils;&nbsp;2...&nbsp;&nbsp;<a href='http://www.blogjava.net/tingfeng/articles/433064.html'>阅读全文</a><img src ="http://www.blogjava.net/tingfeng/aggbug/433064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2018-02-28 09:06 <a href="http://www.blogjava.net/tingfeng/articles/433064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 实现PPPoE拨号</title><link>http://www.blogjava.net/tingfeng/articles/432594.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 08 Jun 2017 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432594.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432594.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432594.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/wqx_163/article/details/50704252">http://blog.csdn.net/wqx_163/article/details/50704252</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-08 21:19 <a href="http://www.blogjava.net/tingfeng/articles/432594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android shell命令查询ip，网关，DNS</title><link>http://www.blogjava.net/tingfeng/articles/432593.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 08 Jun 2017 13:18:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432593.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432593.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432593.html</trackback:ping><description><![CDATA[<a href="http://www.cnblogs.com/mypsq/p/5821953.html">http://www.cnblogs.com/mypsq/p/5821953.html</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-08 21:18 <a href="http://www.blogjava.net/tingfeng/articles/432593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】Android 实现PPPoE拨号</title><link>http://www.blogjava.net/tingfeng/articles/432574.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Fri, 02 Jun 2017 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432574.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432574.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432574.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于Android实现PPPoE拨号上网的问题。																		系统必须安装有ppp和rp-pppoe程序。一般ROM自带有ppp程序的、rp-pppoe就未必有了，需要交叉rp-pppoe到目标机。我的开发环境已带有rp-pppoe的二进制程序pppoe和一个shell程序pppoe-connect了。		先来看看pppoe-connect里面是什...&nbsp;&nbsp;<a href='http://www.blogjava.net/tingfeng/articles/432574.html'>阅读全文</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-02 21:22 <a href="http://www.blogjava.net/tingfeng/articles/432574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析Android权限机制（一） —— Android的权限机制</title><link>http://www.blogjava.net/tingfeng/articles/432573.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Fri, 02 Jun 2017 13:20:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432573.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432573.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432573.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一章 Android的权限机制								&nbsp; &nbsp; Android是基于Linux的系统，其权限访问控制自然离不开Linux的权限访问控制，而在第一章当中，将分成两个部分来剖析Android的权限控制系统。						一. Linux权限机制				&nbsp; &nbsp; &nbsp;Linux的权限访问是由进程(访问者)和文件(被访问者)两部分...&nbsp;&nbsp;<a href='http://www.blogjava.net/tingfeng/articles/432573.html'>阅读全文</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-02 21:20 <a href="http://www.blogjava.net/tingfeng/articles/432573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android实现pppoe拨号上网（二）具体步骤</title><link>http://www.blogjava.net/tingfeng/articles/432569.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Fri, 02 Jun 2017 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432569.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432569.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432569.html</trackback:ping><description><![CDATA[<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">实验环境搭建，满足pppoe链接的基础服务，就是保证ppp协议能够封装在以太网框架中的一种网络隧道协议，因为集成了ppp协议，所以实现了创痛以太网不能提供身份验证，加密和压缩的功能。本质上，它是一个允许在以太网广播域中的两个以太网接口间创建ppp协议隧道。它使用传统的基于PPP的软件来管理一个不是使用串行线路而是使用类似于以太网的有向分组网络的连接。这种有登陆和口令的标准连接，方便了接入供应商的记费。并且，连接的另一端仅当PPPoE连接接通时才分配IP地址，所以允许IP地址的动态复用。</p>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">---wiki :<span class="Apple-converted-space">&nbsp;</span><a style="text-decoration: none; border-bottom: #949494 1px dashed; font-weight: bold; color: #949494; outline-width: 0px; font-style: italic; outline-style: none; outline-color: invert; transition: 0.25s" href="http://zh.wikipedia.org/zh-cn/PPPoE" target="_blank">http://zh.wikipedia.org/zh-cn/PPPoE</a></p>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">(PPPoE及TCP/IP协议栈)<span class="Apple-converted-space">&nbsp;</span><br /></p>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">
				<strong style="font-weight: bold; text-indent: 0px">(一)pppoe-server</strong>
				<span class="Apple-converted-space">&nbsp;</span>
				<br />
		</p>
		<blockquote style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 14px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; padding-left: 10px; margin: 0px 0px 1.5em; border-left: #0aa284 5px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #f6f6f6; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">也就是PC机器，我这边只说linux系统下面的情况，我的是Ubuntu系统，下载rp-pppoe：&nbsp;<span class="Apple-converted-space">&nbsp;</span><a style="text-decoration: none; border-bottom: #949494 1px dashed; font-weight: bold; color: #949494; outline-width: 0px; font-style: italic; outline-style: none; outline-color: invert; transition: 0.25s" href="http://www.roaringpenguin.com/products/pppoe" target="_blank">http://www.roaringpenguin.com/products/pppoe</a></p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">按照里面的README来要求来安装rp-pppoe。最简单的就是default直接运行go脚本。然后PC机器就可以运行pppoe-server命令了。不要急，还要对server进行配置，配置文件在/etc/pppoe-server-options，打开进行改写。我的配置如下:</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<pre class="prettyprint hljs php" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">						<span class="hljs-comment" style="color: #888888"># PPP options for the PPPoE server</span>
						<span class="hljs-comment" style="color: #888888"># LIC: GPL</span>
auth                   <span class="hljs-comment" style="color: #888888">#链接时候验证</span><span class="hljs-keyword" style="font-weight: 700; color: #333333">require</span>-chap           <span class="hljs-comment" style="color: #888888">#CHAP认证</span><span class="hljs-comment" style="color: #888888"># login                #链接后验证</span>
lcp-<span class="hljs-keyword" style="font-weight: 700; color: #333333">echo</span>-interval <span class="hljs-number" style="color: #880000">10</span><span class="hljs-comment" style="color: #888888">#每10秒发送心跳信令request</span>
lcp-<span class="hljs-keyword" style="font-weight: 700; color: #333333">echo</span>-failure <span class="hljs-number" style="color: #880000">2</span><span class="hljs-comment" style="color: #888888">#连续两条心跳信令reply没有回复断开链接</span></pre>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">保存退出，这样配置完成，这样在建立ppp链接的Discovery阶段就会进行验证，server保存的验证用户名，密码就在/etc/ppp/chap-secrets里面：</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<pre class="prettyprint hljs cpp" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px"># Secrets <span class="hljs-keyword" style="font-weight: 700; color: #333333">for</span> authentication <span class="hljs-keyword" style="font-weight: 700; color: #333333">using</span> CHAP
<span class="hljs-meta" style="color: #1f7199"># client               server      secret             IP addresses</span><span class="hljs-string" style="color: #880000">"user_xiaokeweng"</span>    *           <span class="hljs-string" style="color: #880000">"my_password"</span>      *</pre>其中各个字段的含义，顾名思义，*指代all。
<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px"></p><p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">最后在PC端启动pppoe-server，输入命令：</p><p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px"></p><pre class="prettyprint hljs nginx" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px"><span class="hljs-attribute" style="font-weight: 700; color: #333333">sudo</span> pppoe-server -I eth0</pre><br /></blockquote>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">
				<strong style="font-weight: bold; text-indent: 0px">(二)pppoe-client</strong>
				<span class="Apple-converted-space">&nbsp;</span>
				<br />
		</p>
		<blockquote style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 14px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; padding-left: 10px; margin: 0px 0px 1.5em; border-left: #0aa284 5px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #f6f6f6; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">在android上面移植pppoe模块，同样使用rp-pppoe，我们可以build成模块移植到android终端上面，需要自己写make file，我这边是用Android.mk:</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<pre class="prettyprint hljs makefile" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">LOCAL_PATH:= <span class="hljs-variable" style="color: #bc6060">$(call my-dir)</span>
include $(CLEAR_VARS)

LOCAL_SRC_FILES:=\
    src/pppoe.c \
    src/if.c \
    src/debug.c \
    src/common.c \
    src/ppp.c \
    src/discovery.c

LOCAL_MODULE_PATH := <span class="hljs-variable" style="color: #bc6060">$(LOCAL_PATH)</span>
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := pppoe
LOCAL_C_INCLUDES += <span class="hljs-variable" style="color: #bc6060">$(LOCAL_PATH)</span>/src

include $(BUILD_EXECUTABLE)</pre>
				<span>
						<br />
				</span>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
						<span>于是build出来pppoe可执行模块，push到/system/bin下面，当然可以直接改写rp-pppoe的makefile。于是在终端就可以发起pppoe链接请求了。</span>
						<span class="Apple-converted-space">&nbsp;</span>
						<br />
				</p>
		</blockquote>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">
				<strong style="font-weight: bold; text-indent: 0px">(三)运行测试</strong>
		</p>
		<blockquote style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 14px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; padding-left: 10px; margin: 0px 0px 1.5em; border-left: #0aa284 5px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #f6f6f6; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">（1）首先要保证Client，Server都在一个广播域中，按照前文中的思路，手持终端是通过wifi，链接到接入LAN中的无线路由器中，而PC是直接接入到LAN中的。<span class="Apple-converted-space">&nbsp;</span><br /></p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">（2）adb进入设备终端后，输入</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">
				</p>
				<pre class="prettyprint hljs awk" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">						<span class="hljs-regexp" style="color: #bc6060">/system/</span>bin<span class="hljs-regexp" style="color: #bc6060">/pppoe -d</span></pre>就会发起Discorvery，在广播域内广播PADI报文，成功的话会返回发现的pppoe-server的MAC地址，并且在PC端抓包eth0的话，使用ppp||pppoed进行过滤，能够收到终端的广播报文。这样就能说明已经实现pppoe通路。接着：
<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px"></p><pre class="prettyprint hljs awk" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px"><span class="hljs-regexp" style="color: #bc6060">/system/</span>bin<span class="hljs-regexp" style="color: #bc6060">/pppd pty "/</span>system<span class="hljs-regexp" style="color: #bc6060">/bin/</span>pppoe -I wlan0<span class="hljs-string" style="color: #880000">" user user_xiaokeweng password my_password</span></pre><p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px"></p><p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">这样就会发起pppoe链接，经过Discovery，认证，LCP，最终建立其ppp链接。在PC端会看到新建立起来的ppp0，Client端也会看到。</p></blockquote>
		<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; font: 16px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; margin: 0px 0px 0.75em; widows: 1; letter-spacing: normal; background-color: #fefefe; text-indent: 1em; -webkit-text-stroke-width: 0px">
				<strong style="font-weight: bold; text-indent: 0px">(四)后续配置</strong>
		</p>
		<blockquote style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 14px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; padding-left: 10px; margin: 0px 0px 1.5em; border-left: #0aa284 5px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #f6f6f6; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">（1）PC端配置iptable使终端的数据包能够请求访问internets</p>
				<pre class="prettyprint hljs tcl" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">echo <span class="hljs-number" style="color: #880000">1</span> &gt; /<span class="hljs-keyword" style="font-weight: 700; color: #333333">proc</span>/sys/net/ipv4/ip_forward   //打开iptable，该命令切换到root运行<span class="hljs-title" style="font-weight: bold; color: #880000">
iptables</span>  -t<span class="hljs-title" style="font-weight: bold; color: #880000"> nat</span> -F            //清空表项<span class="hljs-title" style="font-weight: bold; color: #880000">
iptables</span>  -t<span class="hljs-title" style="font-weight: bold; color: #880000"> nat</span> -L            //现实表项<span class="hljs-title" style="font-weight: bold; color: #880000">
iptables</span>  -t<span class="hljs-title" style="font-weight: bold; color: #880000"> nat</span> -A<span class="hljs-title" style="font-weight: bold; color: #880000"> POSTROUTING</span> -s 192.168.1.1 -j<span class="hljs-title" style="font-weight: bold; color: #880000"> SNAT</span> --to 192.168.163.254
//-s 为终端获得的ip，--to 为ethx 的ip</pre>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">（2）在终端增加路由表项目</p>
				<pre class="prettyprint hljs cs" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">ip -d route                     <span class="hljs-comment" style="color: #888888">//查看路由表项</span>
ip route del <span class="hljs-keyword" style="font-weight: 700; color: #333333">default</span><span class="hljs-comment" style="color: #888888">//删除掉全部default，需要操作多遍   </span>
ip route <span class="hljs-keyword" style="font-weight: 700; color: #333333">add</span><span class="hljs-keyword" style="font-weight: 700; color: #333333">default</span> dev ppp0   <span class="hljs-comment" style="color: #888888">//将默认路由设为ppp0</span>
ip -d route                     <span class="hljs-comment" style="color: #888888">//再次查看</span></pre>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">（3）配置dns</p>
				<p style="font-size: 16px; font-style: italic; margin: 0px; line-height: 1.7em; text-indent: 0px">这样操作的话是不需要设置dns的，因为链接wlan的时候，使用的dns-server与现在的是完全一样的，如果经过上述操作，能够ping通internet但是不能够正常上网的话，一定就是dns的问题了。</p>
		</blockquote>
		<blockquote style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 14px/27px 'Helvetica Neue', Helvetica, Tahoma, Arial, STXihei, 'Microsoft YaHei', 微软雅黑, sans-serif; padding-left: 10px; margin: 0px 0px 1.5em; border-left: #0aa284 5px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #f6f6f6; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<pre class="prettyprint hljs less" style="word-wrap: break-word; font-size: 14px; border-top: medium none; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; border-right: medium none; white-space: pre; overflow-x: auto; border-bottom: medium none; word-break: break-all; color: #444444; padding-bottom: 0.5em; padding-top: 0.5em; padding-left: 0.5em; margin: 0px 0px 1.5em; border-left: medium none; display: block; line-height: 1.5em; padding-right: 0.5em; background-color: #f6f6f6; border-radius: 4px">						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">getprop</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">net</span>
						<span class="hljs-selector-class" style="color: #880000">.dns1</span>
						<span class="hljs-comment" style="color: #888888">//查看默认路由1</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">getprop</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">net</span>
						<span class="hljs-selector-class" style="color: #880000">.dns2</span>
						<span class="hljs-comment" style="color: #888888">//查看默认路由2</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">setprop</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">net</span>
						<span class="hljs-selector-class" style="color: #880000">.dns1</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">110</span>
						<span class="hljs-selector-class" style="color: #880000">.112</span>
						<span class="hljs-selector-class" style="color: #880000">.120</span>
						<span class="hljs-selector-class" style="color: #880000">.115</span>
						<span class="hljs-comment" style="color: #888888">//设置默认路由1 </span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">setprop</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">net</span>
						<span class="hljs-selector-class" style="color: #880000">.dns2</span>
						<span class="hljs-selector-tag" style="font-weight: 700; color: #333333">110</span>
						<span class="hljs-selector-class" style="color: #880000">.112</span>
						<span class="hljs-selector-class" style="color: #880000">.120</span>
						<span class="hljs-selector-class" style="color: #880000">.114</span>
						<span class="hljs-comment" style="color: #888888">//设置默认路由2</span>
				</pre>
		</blockquote><img src ="http://www.blogjava.net/tingfeng/aggbug/432569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-02 15:30 <a href="http://www.blogjava.net/tingfeng/articles/432569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下搭建 PPPoE Server 问题总结</title><link>http://www.blogjava.net/tingfeng/articles/432568.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Fri, 02 Jun 2017 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432568.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432568.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432568.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432568.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注：本记录适用于Debian系列Linux操作系统。在Ubuntu 14.10 以及 Linux Mint 17下验证成功。		在综合课程设计的搭建 PPPoE Server 环节中，本人以及组员碰到各种问题。在此总结，以备日后需要。										搭建过程										安装和配置PPPoE程序		PPPoE程序在Debian操作系统中应该是自带的。可以使...&nbsp;&nbsp;<a href='http://www.blogjava.net/tingfeng/articles/432568.html'>阅读全文</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-06-02 15:29 <a href="http://www.blogjava.net/tingfeng/articles/432568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PPPoE拨号流程</title><link>http://www.blogjava.net/tingfeng/articles/432554.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Sat, 27 May 2017 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432554.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432554.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432554.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content tracking-ad" style="white-space: normal; word-spacing: 0px; text-transform: none; color: #000000; text-align: left; font: 14px/26px Arial; margin: 20px 0px 0px; widows: 1; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; font-stretch: normal; -webkit-text-stroke-width: 0px" data-mod="popu_307" data-dsm="post">
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">
										<span style="font-size: 14px">
												<strong>
														<span style="color: red">PPPoE</span>
												</strong>
										</span>（Point to Point Protocol over Ethernet，基于以太网的点对点协议）的工作流程包含<strong>发现（Discovery）</strong>和<strong>会话（Session）</strong>两个阶段，发现阶段是<strong>无状态</strong>的，目的是获得PPPoE终端（在局端的ADSL设备上）的以太网MAC地址，并建立一个惟一的PPPoE SESSION-ID。发现阶段结束后，就进入标准的PPP会话阶段。</span>
						</p>
				</blockquote>
				<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
						<span style="font-size: 18px">
								<strong>1.发现阶段（PPPoED：PPPoE Discovery）</strong>
						</span>
				</p>
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">1.1<span class="Apple-converted-space">&nbsp;</span><strong><span style="color: red">PADI</span></strong>（PPPoE Active Discovery<strong><span class="Apple-converted-space">&nbsp;</span>Initiation</strong>）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">主机广播发起分组，分组的目的地址为以太网的广播地址 0xffffffffffff，CODE（代码）字段值为0&#215;09（PADI Code），SESSION-ID（会话ID）字段值为0x0000。PADI分组必须至少包含一个服务名称类型的<strong>标签</strong>（Service Name Tag，字段值为0x0101），向接入集中器提出所要求提供的服务。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">1.2<span class="Apple-converted-space">&nbsp;</span><strong><span style="color: red">PADO</span></strong>（PPPoE Active Discovery<strong><span class="Apple-converted-space">&nbsp;</span>Offer</strong>）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">接入集中器收到在服务范围内的PADI分组，发送PPPoE有效发现提供包分组，以响应请求。其中CODE字段值为0&#215;07<span style="font-size: 14px">（PADO Code）</span>，SESSION-ID字段值仍为0x0000。PADO分组必须包含一个接入集中器名称类型的标签（Access Concentrator Name Tag，字段值为0x0102），以及一个或多个服务名称类型标签，表明可向主机提供的服务种类。<u>PADO<span style="font-size: 14px">和PADI的</span>Host-Uniq Tag值相同</u>。<br /></span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">1.3<strong><span style="color: red"><span class="Apple-converted-space">&nbsp;</span>PADR</span></strong>（PPPoE Active Discovery<strong><span class="Apple-converted-space">&nbsp;</span>Request</strong>）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">主机在可能收到的多个PADO分组中<strong>选择一个</strong>合适的PADO分组，然后向所选择的接入集中器发送PPPoE有效发现<strong>请求</strong>分组。其中CODE字段为0x19<span style="font-size: 14px">（PADR Code）</span>，SESSION_ID字段值仍为0x0000。PADR分组必须包含一个服务名称类型标签，确定向接入集线器（或交换机）请求的服务种类。当主机在指定的时间内没有接收到PADO，它应该重新发送它的PADI分组，并且<strong>加倍等待</strong>时间，这个过程会被重复期望的次数。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">1.4<span class="Apple-converted-space">&nbsp;</span><strong><span style="color: red">PADS</span></strong>（PPPoE Active Discovery<strong><span class="Apple-converted-space">&nbsp;</span>Session</strong>-confirmation）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">接入集中器收到PADR分组后准备开始PPP会话，它发送一个PPPoE有效发现会话确认PADS分组。其中CODE字段值为0&#215;65（PADS Code），SESSION-ID字段值为接入集中器所产生的一个<strong>惟一的</strong>PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签以确认向主机提供的服务。当主机收到PADS 分组确认后，双方就进入PPP会话阶段。<u>PADS<span style="font-size: 14px"><span style="font-size: 14px">和PADR的</span></span></u><span style="font-size: 14px"><u>Host-Uniq Tag值相同</u>。</span></span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719173836765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图1 PPPoE的协商流程</span>
						</p>
				</blockquote>
				<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
						<span style="font-size: 18px">
								<strong>2.会话阶段（PPPoES：PPPoE Session）</strong>
						</span>
				</p>
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">PPP会话的建立，需要两端的设备都发送LCP数据包来配置和<a title="软件测试知识库" class="replace_word" style="text-decoration: none; font-weight: bold; color: #df3434" href="http://lib.csdn.net/base/softwaretest" target="_blank">测试</a>数据通信链路。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">用户主机与接入集中器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。一旦PPPoE会话开始，PPP数据就可以以任何其他的PPP封装形式发送。所有的以太网帧都是<strong>单播</strong>的。PPPoE会话的SESSION-ID一定不能改变，并且必须是发现阶段分配的值。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
										<strong>2.1 LCP协商阶段</strong>（<strong><span style="color: red">LCP</span>：Link Control Protocol</strong>）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">LCP的Request主机和AC都要给对方发送，LCP协商阶段完成最大传输单元（MTU），是否进行认证和采用何种认证方式（Authentication Type）的协商。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">（1）LCP协议数据报文分类</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">
										<strong>链路配置报文</strong>：用来建立和配置一条链路，主要包括Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject报文</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">
										<strong>链路维护报文</strong>：用来管理和调试链路，主要包括Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request报文</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">
										<strong>链路终止报文</strong>：用来终止一条链路，主要包括Terminate-Request和Terminate-Reply报文</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">（2）LCP协商过程</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">LCP协商的过程如下：协商双方互相发送一个LCP Config-Request报文，确认收到的Config-Request报文中的协商选项，根据这些选项的支持与接受情况，做出适当的回应。若两端都回应了Config-ACK，则标志LCP链路建立成功，否则会继续发送Request报文，直到对端回应了ACK报文为止。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719173848562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图2 LCP协商的基本过程</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">
										<strong>说明：</strong>
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">（1）Config-ACK：若完全支持对端的LCP选项，则回应Config-ACK报文，报文中必须完全协带对端Request报文中的选项。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">（2）Config-NAK：若支持对端的协商选项，但不认可该项协商的内容，则回应Config-NAK报文，在Config-NAK的选项中填上自己期望的内容，如:对端MRU值为1500，而自己期望MRU值为1492，则在Config-NAK报文中埴上自己的期望值1492。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">（3）Config-Reject：若不能支持对端的协商选项，则回应Config-Reject报文，报文中带上不能支持的选项，如Windows拨号器会协商CBCP（被叫回呼），而ME60不支持CBCP功能，则回将此选项拒绝掉。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
										<strong>2.2 认证阶段</strong>（<span style="font-size: 14px">PPP</span><span class="Apple-converted-space">&nbsp;</span>Authentication：PAP/CHAP）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">会话双方通过LCP协商好的认证方法进行认证，如果认证通过了，才可以进行下面的网络层的协商。认证过程在链路协商结束后就进行。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">&#8544;<span class="Apple-converted-space">&nbsp;</span><strong><span style="color: red">PAP</span></strong>（Password Authentication Protocol，口令认证协议）认证</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">PAP为<strong>两次</strong>握手协议，它通过用户名及口令来对用户进行验证。PAP验证过程如下：</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">当两端链路可相互传输数据时，被验证方发送本端的<strong>用户名及口令</strong>到验证方，验证方根据本端的用户表（或Radius服务器）查看是否有此用户，口令是否正确。如<strong>正确</strong>则会给对端发送Authenticate-ACK报文，通告对端已被允许进入下一阶段协商；<strong>否则</strong>发送NAK报文，通告对端验证失败。此时，并不会直接将链路关闭。只有当验证不过次数达到一定值（缺省为10）时，才会关闭链路。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">PAP的特点是在网络上以<strong>明文</strong>的方式传递用户名及口令，如在传输过程中被截获，便有可能对网络安全造成极大的威胁。因此，它适用于对网络安全要求相对较低的环境。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719174004812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图3 PAP认证流程</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">&#8545;<span class="Apple-converted-space">&nbsp;</span><strong><span style="color: red">CHAP</span></strong>（Challenge Handshake Authentication Protocol，质询握手认证协议）认证</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">CHAP为<strong>三次</strong>握手协议。<span style="color: red">只在网络上传输用户名，并不传输用户口令</span>，因此它的安全性要比PAP高。CHAP的验证过程为：</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">首先由<span style="color: #990000"><strong>验证方</strong></span>（Server）向被验证方（Client）发送一些<span style="color: #ff0000">随机产生的报文</span>，并同时将本端的<strong>主机名</strong>附带上一起发送给被验证方。<span style="color: #990000"><strong>被验证方</strong></span>接到对端对本端的验证请求（Challenge）时，便根据此报文中验证方的主机名和本端的用户表查找用户口令字，如找到用户表中与验证方主机名相同的用户，<span style="color: #ff6600">便利用报文ID、此用户的密钥用Md5<a title="算法与数据结构知识库" class="replace_word" style="text-decoration: none; font-weight: bold; color: #df3434" href="http://lib.csdn.net/base/datastructure" target="_blank">算法</a>生成应答（Response）</span>，随后将应答和自己的<strong>主机名</strong>送回。<span style="color: #990000"><strong>验证方</strong></span>接到此应答后，用报文ID、本方保留的口令字（密钥）和随机报文用Md5算法得出结果，与被验证方应答比较，根据比较结果返回相应的结果（ACK or NAK）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">（1）接受认证端发送Challenge</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">（2）申请认证端发验证请求报文</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">（3）接受认证端回应认证接受报文</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">经过以上三次报文交互后，CHAP认证完成。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719174031078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图4 CHAP认证流程</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
										<strong>2.3 NCP协商阶段</strong>（<strong><span style="color: red">NCP</span></strong>：Network Control Protocol）</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">NCP有很多种，如IPCP、BCP、IPv6CP，最为常用的是<strong><a style="text-decoration: none; color: #ca0000" href="http://tools.ietf.org/html/rfc1332" target="_blank">IPCP</a></strong>（Internet Protocol Control Protocol）协议。NCP的主要功能是<span style="color: red">协商</span><span style="color: red">PPP</span><span style="color: red">报文的网络层参数</span>，如IP地址，DNS Server IP地址，WINS Server IP地址等。PPPoE用户主要通过IPCP来获取访问网络的IP地址或IP地址段。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">NCP流程与LCP流程类似，用户与ME设备之间互相发送NCP Config-Request报文并且互相回应NCP Config-Ack报文后，标志NCP己协商完，用户上线成功，可以正常访问网络了。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">IPCP的协商过程是基于PPP状态机进行协商的。经过双方协商，通过配置请求、配置确认、配置否认等包文交换配置信息，最终由initial (或closed)状态变为Opened状态。IPCP状态变为Opened的条件必须是发送方和接收方都发送和接收过确认包文。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">IPCP协商过程中，协商包文可包含多个选项，即参数。各个选项的拒绝或否认都不能影响IPCP的UP，IPCP可以无选项协商，无选项协商也同样能够UP。选项有IP Address、网关、掩码等，其中IP Address是最重要的一个选项，有些厂家的实现必须这个选项得到确认，大多数厂家的实现允许这个选项为空。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">NCP的基本协商流程见下图：</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719174053765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图5 NCP的基本协商流程</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">用户和接入设备对IP服务阶段的一些要求进行多次协商，以决定双方都能够接收的约定。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">如：IP业务阶段使用的IP压缩协议等。双方的协议是通过报文中包含的Option项进行协商的，每一个Option都是一个需要协商的问题。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">最后双方都需要对方答复Configure_Ack的同意报文。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
										<strong>2.4 会话维持（Session Keep-alive）</strong>
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">设备主动发送<strong><span style="color: red">Echo</span></strong><span class="Apple-converted-space">&nbsp;</span>Request进行PPPoE心跳保活，若3次未得到服务器的响应，则设备主动释放地址。发LCP&nbsp;Echo&nbsp;Request&nbsp;的时候，魔术字字段要和之前通信的Configure_Request使用的魔术字字段保持一致。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">有些设备或终端不支持主动发送 Echo-Request 报文, 只能支持回应Echo-Reply报文。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
										<strong>2.5 会话结束（Session Termination）</strong>
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">PPPoE 还有一个<strong><span style="color: red">PADT</span></strong>（PPPOE Active Discovery Terminate）分组，它可以在会话建立后的任何时候发送，来终止PPPoE会话，也就是会话释放。它可以由主机或者接入集中器发送，目的地址填充为对端的以太网的MAC地址。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="left">
								<span style="font-size: 14px">当对方接收到一个 PADT（PPPOE Active Discovery Terminate）分组，就不再允许使用这个会话来发送PPP业务。PADT分组不需要任何标签，其CODE字段值为0xa7（PADT Code），SESSION-ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后，即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话，但是当PPP不能使用时，可以使用PADT。</span>
						</p>
				</blockquote>
				<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
						<span style="font-size: 18px">
								<strong>3.PPPoE接入流程示例</strong>
						</span>
				</p>
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">PPP状态变迁如图6所示：</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719174124437?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图6 PPP状态变迁图</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">以PPPoE-CHAP为例，PPP用户接入流程如图7所示：</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">
										<img style="max-width: 100%; border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://img.blog.csdn.net/20130719174143921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1bnht/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />
										<br />
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" align="center">
								<span style="font-size: 14px">图7 PPPoE/CHAP接入认证流程</span>
						</p>
				</blockquote>
				<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
						<span style="font-size: 14px">
								<strong>
										<span style="font-size: 18px">4.<a title="Linux知识库" class="replace_word" style="text-decoration: none; font-weight: bold; color: #df3434" href="http://lib.csdn.net/base/linux" target="_blank">Linux</a>中的PPPoE拨号守护进程</span>
								</strong>（<span style="color: #ff0000">pppd</span>：Point-to-Point Protocol Daemon）</span>
				</p>
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">pppd是一个后台服务进程(daemon)，是一个用户空间的进程，所以把策略性的内容从内核的PPP协议处理模块移到pppd中是很自然的事了。pppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">pppd只是一个普通的用户进程，它如何扩展PPP协议呢？这就是pppd与内核中的PPP协议处理模块之间约定了，它们之间采用了最传统的内核空间与用户空间之间通信方式：设备文件。</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">设备文件名是<span style="color: red">/dev/ppp</span>。通过<strong>read</strong>系统调用，pppd可以读取PPP协议处理模块的数据包，当然，PPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过<strong>write</strong>系统调用，pppd可以把要发送的数据包传递给PPP协议处理模块。通过<strong>ioctrl</strong>系统调用，pppd可以设置PPP协议的参数，可以建立/关闭连接。</span>
						</p>
				</blockquote>
				<br />
				<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
						<span style="font-size: 18px">
								<strong>参考：</strong>
						</span>
				</p>
				<blockquote>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://z.download.csdn.net/detail/dljianggk/471991" target="_blank">PPP协议</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/cuishinankobe/archive/2009/03/10/3976342.aspx" target="_blank">PPP状态机总结</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/hechunhu2008/archive/2008/12/16/3520753.aspx" target="_blank">PPP协议详细解析</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>&nbsp;</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/1223d2244b35eefdc8d333f6" target="_blank">PPPoE协议篇</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://book.51cto.com/art/200704/46404.htm" target="_blank">PPPoE通信协议</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/4c3aa22abd64783e09122b9e.html" target="_blank">PPPoE拔号流程</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>&nbsp;</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/0afb0e03e87101f69e3195c6.html" target="_blank">PAP和CHAP认证</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://cisco.chinaitlab.com/others/39703.html" target="_blank">PPP-CHAP原理与配置</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.chinaunix.net/uid-20799583-id-3125197.html" target="_blank">PPP的CHAP认证完全配置</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>&nbsp;</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/gl1987807/article/details/6227032" target="_blank">PPPoE实例》</a></span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/91219cfbaef8941ea76e052c.html" target="_blank">PPPoE拨号过程抓包解析</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/110c06c05fbfc77da269b1ef.html" target="_blank">PPPoE用户上线交互过程</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://wenku.baidu.com/view/05e8ab8da0116c175f0e4837" target="_blank">PPPoE协议技术与标准培训教材</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">《<a style="text-decoration: none; color: #ca0000" href="http://service.tp-link.com.cn/detail_article_341.html" target="_blank">路由器如何设置PPPoE上网（ADSL虚拟拨号）</a>》<br /></p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://www.net527.cn/a/caozuoxitong/Linux/2013/0126/25350.html" target="_blank">Linux系统修改PPPOE配置解决ADSL频繁掉线问题</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<br />
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/osnetdev/article/details/8958058" target="_blank">LinuxPPP实现源码分析</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/absurd/article/details/1596496" target="_blank">Linux PPP 数据收发流程</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/lenovo_/article/details/6657496" target="_blank">PPPoE协议和pppd源码分析</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>&nbsp;</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://network.51cto.com/art/201009/226781.htm" target="_blank">如何用Linux做PPPoE服务器</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://net.zdnet.com.cn/network_security_zone/2010/0908/1877592.shtml" target="_blank">LinuxPPPoE设置的六个步骤</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">
								</span>&nbsp;</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/wangflash/article/details/5758264" target="_blank">关于pppd移植和3g功能》</a></span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://blog.csdn.net/u010979030/article/details/9315287" target="_blank">移植&#8212;&#8212;linux下使用3G拨号上网</a>》</span>
						</p>
						<p style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
								<span style="font-size: 14px">《<a style="text-decoration: none; color: #ca0000" href="http://enchen.blog.51cto.com/716040/167150" target="_blank">成功实现Linux下pppd通过GPRS拨号上网</a>》</span>
						</p>
				</blockquote>
		</div>
		<div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="white-space: normal; word-spacing: 0px; text-transform: none; zoom: 1; float: right; color: #000000; text-align: left; font: 12px Arial, Console, Verdana, 'Courier New'; widows: 1; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px" data-mod="popu_172" data-bd-bind="1495847658305">
				<a class="bds_more" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png); background-repeat: no-repeat; background-position: 0px 0px; float: left; color: #333333; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="more">
				</a>
				<a title="分享到QQ空间" class="bds_qzone" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=91362611.png); background-repeat: no-repeat; background-position: 0px -52px; float: left; color: #ca0000; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="qzone">
				</a>
				<a title="分享到新浪微博" class="bds_tsina" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=91362611.png); background-repeat: no-repeat; background-position: 0px -104px; float: left; color: #ca0000; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="tsina">
				</a>
				<a title="分享到腾讯微博" class="bds_tqq" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=91362611.png); background-repeat: no-repeat; background-position: 0px -260px; float: left; color: #ca0000; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="tqq">
				</a>
				<a title="分享到人人网" class="bds_renren" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=91362611.png); background-repeat: no-repeat; background-position: 0px -208px; float: left; color: #ca0000; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="renren">
				</a>
				<a title="分享到微信" class="bds_weixin" style="cursor: pointer; font-size: 12px; text-decoration: none; height: 16px; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=91362611.png); background-repeat: no-repeat; background-position: 0px -1612px; float: left; color: #ca0000; padding-left: 17px; margin: 6px 6px 6px 0px; line-height: 16px" href="http://blog.csdn.net/lishanmin11/article/details/39399939#" target="_blank" data-cmd="weixin">
				</a>
		</div>转发自：<a href="http://blog.csdn.net/lishanmin11/article/details/39399939">http://blog.csdn.net/lishanmin11/article/details/39399939</a><img src ="http://www.blogjava.net/tingfeng/aggbug/432554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-05-27 09:53 <a href="http://www.blogjava.net/tingfeng/articles/432554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>phpunit入门(1)</title><link>http://www.blogjava.net/tingfeng/articles/432363.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Wed, 08 Mar 2017 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/432363.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/432363.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/432363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/432363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/432363.html</trackback:ping><description><![CDATA[<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">由于我们项目涉及到php，因此需要对php代码进行单元测试。经过一番了解，决定用PHPUnit来测试php。PHPUnit花了不少时间摸索如何配置PHPUnit，看官网的文档也是一把泪。但知道怎么配置后，其实还是很简单的。</p>
		<blockquote style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 16px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<ul style="list-style-type: none; padding-bottom: 15px; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 55px; padding-right: 0px">
						<li style="list-style-type: none; background: url(http://static1.51cto.com/51cto/cms/2016/images/icon.png) no-repeat 0px 13px; padding-bottom: 0px; padding-top: 0px; padding-left: 10px; margin: 0px 0px 0px -20px; line-height: 30px; padding-right: 0px">
								<p style="word-wrap: break-word; font-size: 16px; font-family: 'Microsoft Yahei'; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 30px; padding-right: 0px">系统：Windows 7</p>
						</li>
						<li style="list-style-type: none; background: url(http://static1.51cto.com/51cto/cms/2016/images/icon.png) no-repeat 0px 13px; padding-bottom: 0px; padding-top: 0px; padding-left: 10px; margin: 0px 0px 0px -20px; line-height: 30px; padding-right: 0px">
								<p style="word-wrap: break-word; font-size: 16px; font-family: 'Microsoft Yahei'; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 30px; padding-right: 0px">PHP版本：PHP 7.0.1</p>
						</li>
						<li style="list-style-type: none; background: url(http://static1.51cto.com/51cto/cms/2016/images/icon.png) no-repeat 0px 13px; padding-bottom: 0px; padding-top: 0px; padding-left: 10px; margin: 0px 0px 0px -20px; line-height: 30px; padding-right: 0px">
								<p style="word-wrap: break-word; font-size: 16px; font-family: 'Microsoft Yahei'; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 30px; padding-right: 0px">服务器工具：upupw</p>
						</li>
						<li style="list-style-type: none; background: url(http://static1.51cto.com/51cto/cms/2016/images/icon.png) no-repeat 0px 13px; padding-bottom: 0px; padding-top: 0px; padding-left: 10px; margin: 0px 0px 0px -20px; line-height: 30px; padding-right: 0px">
								<p style="word-wrap: break-word; font-size: 16px; font-family: 'Microsoft Yahei'; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 30px; padding-right: 0px">PHPUnit版本：PHPUnit 5.7.15</p>
						</li>
				</ul>
		</blockquote>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<strong>一、配置PHPUnit</strong>
		</p>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">首先到PHPUnit官网（<a style="font-size: 16px; text-decoration: none; font-family: 'Microsoft Yahei'; color: #ff4200; transition: all 0.5s ease" href="https://phpunit.de/" target="_blank">点此进入</a>）下载相应的版本。我们使用的是php 7.0，于是选择PHPUnit 5。得到&nbsp;<code style="font-weight: normal; font-style: normal">.phar</code>&nbsp;文件，并把名字改为&nbsp;<code style="font-weight: normal; font-style: normal">phpunit.phar</code>&nbsp;。</p>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">把该文件放到任意位置。以我自己为例，我把它放到我们项目的目录下，即<code style="font-weight: normal; font-style: normal">D:\repository\CourseManagement\mobile_api_test</code>&nbsp;。</p>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">右键&nbsp;<strong>我的电脑</strong>&nbsp;，选择&nbsp;<strong>属性</strong>&nbsp;。点击左侧的&nbsp;<strong>高级系统设置</strong>&nbsp;。此时弹出&nbsp;<strong>系统属性</strong>&nbsp;，选择&nbsp;<strong>高级</strong>&nbsp;选项卡，点击右下角的&nbsp;<strong>环境变量</strong>&nbsp;。 在用户变量里面，双击&nbsp;<strong>PATH</strong>&nbsp;，在&nbsp;<strong>变量值</strong>&nbsp;后面添加<code style="font-weight: normal; font-style: normal">;D:\repository\CourseManagement\mobile_api_test</code>&nbsp;（注意最前面的分号，路径填存放phpunit.phar的路径）。配置这个是为了在任意位置都能使用PHPUnit，不配置的话，需要在phpunit.phar的路径下才能使用PHPUnit。</p>
		<blockquote style="white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 0px; padding-top: 0px; font: 16px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<p style="word-wrap: break-word; font-size: 16px; font-family: 'Microsoft Yahei'; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 30px; padding-right: 0px">官方文档里有一点没有提到，就是php的环境变量也要设置。比如我的&nbsp;<code style="font-weight: normal; font-style: normal">php.exe</code>&nbsp;在<code style="font-weight: normal; font-style: normal">E:\software\wamp\bin\php\php5.5.12</code>&nbsp;里，那么也要在&nbsp;<strong>PATH</strong>&nbsp;后面添加<code style="font-weight: normal; font-style: normal">;E:\software\wamp\bin\php\php5.5.12</code>&nbsp;。PS：可能是因为我没有安装PHP的IDE，所以一直没有配置它，偶然之间才想到可能要添加这个环境变量。</p>
		</blockquote>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: justify; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">按快捷键&nbsp;<code style="font-weight: normal; font-style: normal">Win + R</code>&nbsp;，输入cmd并回车。进入存放phpunit.phar的路径。输入&nbsp;<code style="font-weight: normal; font-style: normal">echo @php "%~dp0phpunit.phar" %* &gt; phpunit.cmd</code>&nbsp;并回车。接着输入&nbsp;<code style="font-weight: normal; font-style: normal">phpunit --version</code>&nbsp;并回车。如果得到输出&nbsp;<code style="font-weight: normal; font-style: normal">PHPUnit x.y.z by Sebastian Bergmann and contributors.</code>&nbsp;则表示配置好了（如果有误，输入<code style="font-weight: normal; font-style: normal">exit</code>&nbsp;并回车，重新来一遍）。如下图：</p>
		<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; color: #333333; padding-bottom: 15px; text-align: center; padding-top: 0px; font: 16px/30px 'Microsoft Yahei'; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px">
				<img style="border-top: medium none; border-right: medium none; border-bottom: medium none; border-left: medium none" alt="" src="http://s4.51cto.com/wyfs02/M00/76/E0/wKiom1ZeXoGAwo84AAAYz4pJhO0158.png-wh_651x-s_21683978.png" />
		</p>
		<br />
		<strong>
				<font color="#333333" face="微软雅黑">二、使用PHPUnit进行测试</font>
		</strong>
		<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用PhpUnit必须使用类进行测试，我们先新建一个php类，然后运行一下。<br />&nbsp;&nbsp;&nbsp;&nbsp; 
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">php<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyTestClass&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;PHPUnit_Framework_TestCase<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />{<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">*<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Testing&nbsp;the&nbsp;answer&nbsp;to&nbsp;&#8220;do&nbsp;you&nbsp;love&nbsp;unit&nbsp;tests?&#8221;<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;testDoYouLoveUnitTests()<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080">$love</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080">$this</span><span style="color: #000000">-&gt;</span><span style="color: #000000">assertTrue(</span><span style="color: #800080">$love</span><span style="color: #000000">);<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />}<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">?&gt;</span></div><p><br />将该文件保存为testUnit.php，然后进入到该文件的目录下，运行phpunit testUnit.php<br /><br />得到如下结果：<br /><br /><em>&nbsp;&nbsp;&nbsp;D:\UPUPW_AP7.0\htdocs\testUnit&gt;phpunit testUnit.php<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PHPUnit 5.7.15 by Sebastian Bergmann and contributors.<br /></em><em>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 / 1 (100%)<br /></em><em>&nbsp;&nbsp;&nbsp;Time: 209 ms, Memory: 10.00MB<br /></em><em>&nbsp;&nbsp;&nbsp;OK (1 test, 1 assertion)</em><br /><br />参考文章：<a href="http://developer.51cto.com/art/201512/499453.htm">http://developer.51cto.com/art/201512/499453.htm</a><br /><a href="http://developer.51cto.com/art/201102/244535.htm">http://developer.51cto.com/art/201102/244535.htm</a></p><img src ="http://www.blogjava.net/tingfeng/aggbug/432363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2017-03-08 10:26 <a href="http://www.blogjava.net/tingfeng/articles/432363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发板上搭建lighttpd环境</title><link>http://www.blogjava.net/tingfeng/articles/423614.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 19 Mar 2015 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/423614.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/423614.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/423614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/423614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/423614.html</trackback:ping><description><![CDATA[要在开发板上搭建lighttpd环境，首先要在ubuntu上搭建交叉编译环境，然后对lighttpd的源码进行编译，最后将编译好的文件和配置文件拷贝到开发板上，就可以运行了。<br /><br />1、在ubuntu下搭建交叉编译环境<br />&nbsp;&nbsp;&nbsp;&nbsp; 1） 将开发板提供的gcc拷贝到ubuntu环境下，如我本地拷贝完后的bin目录为：<br />&nbsp;&nbsp;&nbsp;&nbsp; /home/acer/source/arm-gcc/fsl-linaro-toolchain/bin/<br />&nbsp;&nbsp;&nbsp;&nbsp; 2） 配置ubuntu的环境变量文件：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我的ubuntu版本是10.04，打开/etc/bash.bashrc文件，然后在文件末尾增加环境变量。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网上通用配置都包括如下一句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export PATH=/opt/liunx/arm-gcc/fsl-linaro-toolchain/bin:$PATH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是因为开发板不同，我的还要增加如下几句：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export ARCH=arm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export CROSS_COMPILE=/home/acer/source/arm-gcc/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置完成后，保存文件<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）重新加载环境变量：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source /etc/bash.bashrc<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4)验证交叉编译环境，我的会输出如下提示：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acer@ace:~/lighttpd/lighttpd-1.4.18$ arm-linux-gcc -v<br />Using built-in specs.<br />COLLECT_GCC=arm-linux-gcc<br />COLLECT_LTO_WRAPPER=/opt/liunx/arm-gcc/fsl-linaro-toolchain/bin/../libexec/gcc/arm-fsl-linux-gnueabi/4.6.2/lto-wrapper<br />Target: arm-fsl-linux-gnueabi<br />Configured with: /work/build/.build/src/gcc-linaro-4.6-2011.06-0/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-fsl-linux-gnueabi --prefix=/work/fsl-linaro-toolchain-2.13 --with-sysroot=/work/fsl-linaro-toolchain-2.13/arm-fsl-linux-gnueabi/multi-libs --enable-languages=c,c++ --with-pkgversion='Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20' --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-mpfr=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-mpc=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-ppl=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-cloog=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-libelf=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm -L/work/build/.build/arm-fsl-linux-gnueabi/build/static/lib -lpwl' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-multilib --with-local-prefix=/work/fsl-linaro-toolchain-2.13/arm-fsl-linux-gnueabi/multi-libs --disable-nls --enable-c99 --enable-long-long --with-system-zlib<br />Thread model: posix<br />gcc version 4.6.2 20110630 (prerelease) (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20) <br /><br />至此，交叉编译环境搭建完毕<br /><br />2、ubuntu上编译lighttpd<br />我的lighttpd版本为1.4.18，可以自己去lighttpd官网上下载。<br /><br />1)配置configure命令<br />首先进入lighttpd安装文件夹下<br />cd /home/acer/lighttpd/lighttpd1.4.18<br />./configure --prefix=/lighttpd --host=arm-linux --build=i486-linux-gnu --disable-FEATURE -disable-ipv6 -diable-lfs<br />2)编译<br />make<br />3)构建<br />创建/lighttpd文件夹（同configure中的prefix跟的路径），然后授权,最后在lighttpd的安装文件夹下构建<br />sudo mkdir /lighttpd<br />sudo chmod 777 /lighttpd<br />cd /home/acer/lighttpd/lighttpd1.4.18<br />make install<br /><br />上述三步运行完之后，在/lighttpd下会生成lib、bin、sbin、share四个文件夹，这就是要拷贝到开发板上的文件。<br /><br />3、开发板，创建目录，同时拷贝文件到开发板：<br />1）创建根目录/lighttpd（同编译时configure命令中的prefix后跟的路径），授予权限<br />mkdir /lighttpd<br />chmod 777 /lighttpd<br /><br />然后将ubuntu上/lighttpd中的四个文件夹lib、bin、sbin、share拷贝到开发板的/lighttpd下，具体什么方式，自己定吧，我们使用tftp考的的，在此不冗述。<br /><br />2）创建web根目录/htdocs<br />mkdir /htdocs<br />chmod 777 /htdocs<br /><br />3）创建日志保存目录/var/log/lighttpd<br />mkdir /var/log/lighttpd<br />chmod 777 /var/log/lighttpd<br /><br />4、配置并拷贝配置文件到开发板<br />在ubuntu的lighttpd安装文件中，找到lighttpd.config文件<br />cd /home/acer/lighttpd/lighttpd1.4.18/doc<br />打开lighttpd.config,作如下修改：<br />server.document-root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "/htdocs/"<br />server.errorlog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "/var/log/lighttpd/error.log"<br />然后注释掉：<br />#$HTTP["url"] =~ "\.pdf$" {<br />#&nbsp; server.range-requests = "disable"<br />#}<br />保存后，将lighttpd.config拷贝到开发板的/etc/目录下，至此，已经配置完成<br /><br />5、启动lighttpd<br />在开发板上运行：<br /><font color="#000000">/</font>lighttpd/sbin/lighttpd -f /etc/lighttpd.conf<br /><br />然后将一个.html文件放到/htdocs文件夹下，访问web服务器试下吧！<br /><br />参考文件：<br />http://www.linuxidc.com/Linux/2011-09/43619.htm<br />http://www.linuxidc.com/Linux/2013-06/85902.htm<br />http://blog.163.com/ljf_gzhu/blog/static/131553440201211522317367/<br /><br /><img src ="http://www.blogjava.net/tingfeng/aggbug/423614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2015-03-19 11:08 <a href="http://www.blogjava.net/tingfeng/articles/423614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php手册</title><link>http://www.blogjava.net/tingfeng/articles/423406.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 12 Mar 2015 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/423406.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/423406.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/423406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/423406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/423406.html</trackback:ping><description><![CDATA[http://www.kuqin.com/php5_doc/<img src ="http://www.blogjava.net/tingfeng/aggbug/423406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2015-03-12 15:02 <a href="http://www.blogjava.net/tingfeng/articles/423406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php和c之间的消息通信</title><link>http://www.blogjava.net/tingfeng/articles/423405.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 12 Mar 2015 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/423405.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/423405.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/423405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/423405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/423405.html</trackback:ping><description><![CDATA[查阅资料，发现c也有消息队列函数，令我很兴奋，找了一个c的列子，c本身消息队列收发成功了。然后我尝试php和c对发，因为c发送的的是c的结构体
struct，所以我寻求php生成c结构体struct的办法，我用了pack，搜索了pack，或者php 
struct，出来的文章都是同一篇，完全不正确的，经过记录c发送的数据，然后将我用php 
pack的数据做对比，发现数据是一模一样的，但是，发送给c，c无法解析。还好我有点儿php扩展基础，找到php的消息函数，一看：我失望了，php
的消息函数发送的struct是固定的，一个int和一个char[1]，经过一番测试之后，能将一个数字和一个字符串发送给c了<br /><br />PHP代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #000000; ">&lt;?</span><span style="color: #000000; ">php<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #800080; ">$id</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;&nbsp;msg_get_queue&nbsp;(&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">msg_send&nbsp;(</span><span style="color: #800080; ">$id</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">317</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sdsadsdsds</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800080; ">$msg_err</span><span style="color: #000000; ">))&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">echo</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">faile!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Msg&nbsp;not&nbsp;sent&nbsp;because&nbsp;$msg_err\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">}</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">echo</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">success!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">?&gt;</span></div><br />C代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fcntl.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">unistd.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">types.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ipc.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">msg.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;MAX_TEXT&nbsp;512&nbsp;&nbsp;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;BUFSIZE&nbsp;BUFSIZ&nbsp;&nbsp;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;msg_st&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;mtype;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;mtext[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];&nbsp;&nbsp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">};&nbsp;&nbsp;<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;logst(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;msg_st&nbsp;some_data);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">argv)&nbsp;&nbsp;<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">){&nbsp;&nbsp;<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;msgid1;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;msg_st&nbsp;some_data1;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;msg_to_recevie&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">((msgid1</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;msgget((key_t)</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0666</span><span style="color: #000000; ">|</span><span style="color: #000000; ">IPC_CREAT))&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;&nbsp;<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgget</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(EXIT_FAILURE);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(msgrcv(msgid1,(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">some_data1,&nbsp;BUFSIZ,&nbsp;msg_to_recevie&nbsp;,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;&nbsp;<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgrcv</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(EXIT_FAILURE);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">recevier&nbsp;mssage&nbsp;:&nbsp;%s,&nbsp;type=&nbsp;%d;\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;some_data1.mtext,&nbsp;some_data1.mtype);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">printf("%s,&nbsp;%d\n",&nbsp;msg_text,&nbsp;strlen(msg_text));&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(msgctl(msgid1,IPC_RMID,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;&nbsp;<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgctl(IPC_RMID)&nbsp;failed&nbsp;\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(EXIT_FAILURE);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">break;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);&nbsp;&nbsp;<br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; ">}&nbsp;</span></div><br /><br />参考链接：<br />http://blog.csdn.net/leinchu/article/details/8132530<br />http://blog.csdn.net/guoping16/article/details/6584024<img src ="http://www.blogjava.net/tingfeng/aggbug/423405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2015-03-12 14:46 <a href="http://www.blogjava.net/tingfeng/articles/423405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下lighttpd和php环境的搭建</title><link>http://www.blogjava.net/tingfeng/articles/423399.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 12 Mar 2015 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/423399.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/423399.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/423399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/423399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/423399.html</trackback:ping><description><![CDATA[1、安装lighttpd<br /><pre><pre>进入系统，直接安装：<br />sudo apt-get install lighttpd<br /><br />安装完，查看lighttpd目录：<br />a***@a***:/usr/bin$ whereis lighttpd<br />lighttpd: /usr/sbin/lighttpd /etc/lighttpd /usr/lib/lighttpd /usr/share/lighttpd /usr/share/man/man8/lighttpd.8.gz<br /><br />确认lighttpd状态：<br />a****@a***:/usr/bin$ sudo /etc/init.d/lighttpd status<br /> * lighttpd is running<br /><br /><br />2、安装php<br />sudo apt-get install php5-cgi<br /><br />安装完，查看php目录：<br />a***@a***:/usr/bin$ whereis php5<br />php5: /etc/php5 /usr/lib/php5 /usr/share/php5<br />a***@a***:/usr/bin$ whereis php5-cgi<br />php5-cgi: /usr/bin/php5-cgi /usr/share/man/man1/php5-cgi.1.gz<br /><br /><br />安装完，查看php版本：<br />a***@a***:/usr/bin$ /usr/bin/php5-cgi -v<br />PHP 5.3.2-1ubuntu4.28 with Suhosin-Patch (cgi-fcgi) (built: Oct 29 2014 11:54:36)<br />Copyright (c) 1997-2009 The PHP Group<br />Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies<br /><br />3、配置lighttpd支持php：<br />/etc/lighttpd/lighttpd.conf是lighttpd的主要配置文件，需要将文件做如下两步修改：<br />&nbsp;1）、 增加"mod_fastcgi",  "mod_cgi"两项<br /><br /><font color="#0000FF">修改前：</font><br /><em>server.modules              = (<br /></em><pre><em>            "mod_access", <br />            "mod_alias",<br />            "mod_accesslog",<br />            "mod_compress",<br />)</em><br /><br /></pre><font color="#0000FF">修改后：</font><br /><em>server.modules              = (<br />            "mod_access", <br /><font color="#FF0000">            "mod_fastcgi",</font><br /><font color="#FF0000">    	    "mod_cgi", </font><br />            "mod_alias",<br />            "mod_accesslog",</em><em><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "mod_compress",</em><em><br />)</em><br /><br />&nbsp;2）在文件尾增加：<br /><em>fastcgi.server = ( ".php" =&gt;<br />( "localhost" =&gt;<br />(<br />"socket" =&gt; "/tmp/php.socket",<br />"bin-path" =&gt; "/usr/bin/php5-cgi"<br />)<br />)<br />)</em><br /><br />4、重启lighttpd服务器：<br />a***@a***:/usr/bin$ sudo /etc/init.d/lighttpd restart<br />[sudo] password for a***: <br />Syntax OK<br /> * Stopping web server lighttpd                                          [ OK ] <br />Syntax OK<br /> * Starting web server lighttpd                                          [ OK ]<br /><br />这下在var/www/下新增一个php文件就可以读出来了。<br /><br />参考文档：<br />http://blog.chinaunix.net/uid-20761674-id-276003.html<br />http://blog.csdn.net/l0605020112/article/details/10104233<br />http://www.linuxidc.com/Linux/2011-12/48808.htm<br />http://zhidao.baidu.com/link?url=Wy8_Mx_bduKs3F7_kBKYiQ7m0s_-zCPSQFvglZL3xJMsva9oVX8XKm7yWjoHGyLVl2lrMgKhpX-ukmiKG4hT5K<br /></pre></pre><img src ="http://www.blogjava.net/tingfeng/aggbug/423399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2015-03-12 12:22 <a href="http://www.blogjava.net/tingfeng/articles/423399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Form的属性应用</title><link>http://www.blogjava.net/tingfeng/articles/281638.html</link><dc:creator>听风</dc:creator><author>听风</author><pubDate>Thu, 11 Jun 2009 18:10:00 GMT</pubDate><guid>http://www.blogjava.net/tingfeng/articles/281638.html</guid><wfw:comment>http://www.blogjava.net/tingfeng/comments/281638.html</wfw:comment><comments>http://www.blogjava.net/tingfeng/articles/281638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tingfeng/comments/commentRss/281638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tingfeng/services/trackbacks/281638.html</trackback:ping><description><![CDATA[<p>本教程介绍FORM表单标记的各种属性在网页设计中的应用.</p>
		<p>&lt;FORM&gt;标记的NAME属性<br />
基本语法<br />
01 &lt;Form name="Form＿name"&gt; <br />
02 &#8230;&#8230; <br />
03 &lt;/Form&gt; <br />
语法解释<br />
通过为表单命名可以控制表单与后台程序之间的关系。</p>
		<p>文件范例：11-1.htm<br />
在页面中插入表单。<br />
01 &lt;!-- ------------------------------ --&gt;<br />
02 &lt;!-- 文件范例：11-1.htm --&gt;<br />
03 &lt;!-- 文件说明：插入表单 --&gt;<br />
04 &lt;!-- ------------------------------ --&gt;<br />
05 &lt;html&gt;<br />
06 &lt;head&gt;<br />
07 &lt;title&gt;插入表单&lt;/title&gt;<br />
08 &lt;/head&gt;<br />
09 &lt;body&gt;<br />
10 &lt;h1&gt;用户调查&lt;/h1&gt;</p>
		<p>11 &lt;Form name=invest&gt;</p>
		<p>12 &lt;/Form&gt;<br />
13 &lt;/body&gt;<br />
14 &lt;/html&gt; <br /></p>
		<p>文件说明<br />
第11行是表单标记，表单的名称为"invest"。 <br /></p>
		<p>
		</p>
		<div style="page-break-after: always;" twffan="done">
				<span style="display: none;" twffan="done">&nbsp;</span>
		</div>
&lt;FORM&gt;标记的ACTION属性<br />
基本语法<br />
01 &lt;Form action="url"&gt; <br />
02 &#8230;&#8230; <br />
03 &lt;/Form&gt; <br />
语法解释<br />
在action属性中定义表单提交的地址。<br /><p>
文件范例：11-2.htm<br />
设置表单的提交地址。<br />
01 &lt;!-- ------------------------------ --&gt;<br />
02 &lt;!-- 文件范例：11-2.htm --&gt;<br />
03 &lt;!-- 文件说明：设置表单提交地址 --&gt;<br />
04 &lt;!-- ------------------------------ --&gt;<br />
05 &lt;html&gt;<br />
06 &lt;head&gt;<br />
07 &lt;title&gt;设置表单提交地址&lt;/title&gt;<br />
08 &lt;/head&gt;<br />
09 &lt;body&gt;<br />
10 &lt;h1&gt;用户调查&lt;/h1&gt;</p><p>11 &lt;Form name=invest action=mailto:tslxg@hotmail.com&gt;</p><p>12 &lt;/Form&gt;<br />
13 &lt;/body&gt;<br />
14 &lt;/html&gt;</p><p>文件说明<br />
第11行是表单标记，表单的名称为invest，将表单内容以电子邮件的方式传送。</p><p>&nbsp;</p><div style="page-break-after: always;" twffan="done"><span style="display: none;" twffan="done">&nbsp;</span></div>
&lt;FORM&gt;标记的METHOD属性<br />
基本语法<br />
01 &lt;From method="method"&gt; <br />
02 &#8230;&#8230; <br />
03 &lt;/From&gt; <br />
语法解释<br />
mothod属性中，get方法是将表单内容附加在url地址后面，所以对提交信息的长度进行了限制，不可以超过8192个字符。如果信息太长将被剪去，
从而导致意想不到的处理结果。同时get方法不具有保密性，不适合处理如信用卡卡号等要求保密的内容，而且不能传送非ASCII码的字符。post方法是
将用户在表单中填写的数据包含在表单的主体中，一起传送到服务器上的处理程序中，该方法没有字符的限制，它包含了ISO10646的字符集，是一种邮寄的
方式，在浏览器的地址栏不显示提交的信息，这种方法传送的数据是没有限制的。当不指明是那种方式时，默认为get方式。
<p>如下代码，就是以get方式提交到<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#115;&#108;&#120;&#103;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">tslxg@hotmail.com</a>邮件地址的表单写法：<br />
01 &lt;Form name="guestbook" method="get" action="<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#115;&#108;&#120;&#103;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">mailto:tslxg@hotmail.com</a>"&gt;<br />
02 &#8230;&#8230;<br />
03 &lt;/Form&gt; <br /></p><p>文件范例：11-3.htm<br />
设置表单的提交方式。<br />
01 &lt;!-- ------------------------------ --&gt;<br />
02 &lt;!-- 文件范例：11-3.htm --&gt;<br />
03 &lt;!-- 文件说明：设置表单提交方式 --&gt;<br />
04 &lt;!-- ------------------------------ --&gt;<br />
05 &lt;html&gt;<br />
06 &lt;head&gt;<br />
07 &lt;title&gt;设置表单提交方式&lt;/title&gt;<br />
08 &lt;/head&gt;<br />
09 &lt;body&gt;<br />
10 &lt;h1&gt;用户调查&lt;/h1&gt;</p><p>11 &lt;Form name=invest action=mailto:tslxg@hotmail.com method=get&gt;</p><p>12 &lt;/Form&gt;<br />
13 &lt;/body&gt;<br />
14 &lt;/html&gt;</p><p>文件说明<br />
第11行是表单标记，表单的名称为invest，将表单的内容以电子邮件的方式传送，并使用get传输方式。 <br /></p><p>&nbsp;</p><div style="page-break-after: always;" twffan="done"><span style="display: none;" twffan="done">&nbsp;</span></div>
&lt;FORM&gt;标记的ENCTYPE属性<br />
基本语法<br />
01 &lt;Form enctype="value"&gt; <br />
02 &#8230;&#8230; <br />
03 &lt;/Form&gt; <br />
语法解释<br />
value的取值如所下表所示<br /><p>
属性值 描述 <br />
Text/plin&nbsp; 以纯文本形式传送信息 <br />
Application/x-www-Form-urlencoded&nbsp; 默认的编码形式 <br />
Multipart/Form-data&nbsp; 使用mine编码</p><p><br />
文件范例:11-4.htm<br />
设置表单信息提交的编码方式。<br />
01 &lt;!-- ------------------------------ --&gt;<br />
02 &lt;!-- 文件范例：11-4.htm --&gt;<br />
03 &lt;!--文件说明：设置信息提交的编码方式--&gt;<br />
04 &lt;!-- ------------------------------ --&gt;<br />
05 &lt;html&gt;<br />
06 &lt;head&gt;<br />
07 &lt;title&gt;设置信息提交的编码方式&lt;/title&gt;<br />
08 &lt;/head&gt;<br />
09 &lt;body&gt;<br />
10 &lt;h1&gt;用户调查&lt;/h1&gt;</p><p>11 &lt;Form name=invest action=mailto:tslxg@hotmail.com method=get enctype=text/plain&gt;</p><p>12 &lt;/Form&gt;<br />
13 &lt;/body&gt;<br />
14 &lt;/html&gt;</p><p>文件说明<br />
第11行是表单标记，表单的名称为invest，将表单内容以电子邮件的方式传送，并使用get传输方式，以纯文本的形式传送消息。</p><p>&nbsp;</p><div style="page-break-after: always;" twffan="done"><span style="display: none;" twffan="done">&nbsp;</span></div>
&lt;FORM&gt;标记的TARGET属性<br />
基本语法<br />
01 &lt;Form target="target＿win"&gt; <br />
02 &#8230;&#8230; <br />
03 &lt;/Form&gt; <br />
语法解释<br />
target的取值如下表所示<p>属性值 描述 <br />
＿blank 将返回信息显示在新开的浏览器窗口中 <br />
＿parent 将返回信息显示在父级浏览器窗口中 <br />
＿self 将返回信息显示在当前浏览器窗口中 <br />
＿top 将返回信息显示在顶级浏览器窗口中</p><p>文件范例:11-5.htm<br />
设置表单信息返回的窗口。<br />
01 &lt;!-- ------------------------------ --&gt;<br />
02 &lt;!-- 文件范例：11-5.htm --&gt;<br />
03 &lt;!-- 文件说明：设置信息返回的窗口 --&gt;<br />
04 &lt;!-- ------------------------------ --&gt;<br />
05 &lt;html&gt;<br />
06 &lt;head&gt;<br />
07 &lt;title&gt;设置信息返回的窗口&lt;/title&gt;<br />
08 &lt;/head&gt;<br />
09 &lt;body&gt;<br />
10 &lt;h1&gt;用户调查&lt;/h1&gt;</p><p>11 &lt;Form name=invest <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#115;&#108;&#120;&#103;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">mailto:tslxg@hotmail.com</a> method=get enctype=text/plain target=_blank&gt;</p><p>12 &lt;/Form&gt;<br />
13 &lt;/body&gt;<br />
14 &lt;/html&gt;</p><p>文件说明<br />
第11行是表单标记，表单的名称为invest，将表单内容以电子邮件的方式传送，并使用get传输方式，以纯文本形式传送信息，如果有信息返回时，将以新开浏览器窗口的形式显示信息。<br />
在&lt;Form&gt;标记中，可以包含4个标记，如下表所示<br />
标记 描述 <br />
&lt;input&gt; 表单输入标记 <br />
&lt;select&gt; 菜单和列表标记 <br />
&lt;option&gt; 菜单和列表项目标记 <br />
&lt;textarea&gt; 文字域标记</p><p>如下代码</p><p>01 &lt;Form&gt;<br />
02 &lt;input&gt;&#8230;&#8230;&lt;/input&gt;<br />
03 &lt;textaarea&gt;&#8230;&#8230;&lt;/textarea&gt;<br />
04 &lt;select&gt;<br />
05&nbsp;&nbsp;&nbsp; &lt;option&gt;&#8230;&#8230;&lt;/option&gt;<br />
06 &lt;/select&gt;<br />
07 &lt;/Form&gt;</p><br /><p>各种表单域基本可以满足网站收集信息的要求。如果要求浏览者输入文字信息，如姓名、留言等，可以使用文本字段。如果要求浏览者在固定的范围内进行选
择，可以选择单选按纽或者多选按纽，在实际应用中性别、籍贯、爱好常常采用这种方法。有时还会让浏览者提交文件的要求，可以使用文件域，例如某游戏选拔女
主人公原型，要求申请者提交照片等。</p><img src ="http://www.blogjava.net/tingfeng/aggbug/281638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tingfeng/" target="_blank">听风</a> 2009-06-12 02:10 <a href="http://www.blogjava.net/tingfeng/articles/281638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>