posts - 21,  comments - 16,  trackbacks - 0

一、Socket 简介
1、socket只不过是一个数据结构。
2、使用这个socket数据结构去开始一个客户端和服务器之间的会话。
3、服务器是一直在监听准备产生一个新的会话。当一个客户端连接服务器,它就打开服务器正在进行监听的一个端口进行会话。
4、服务器端接受客户端的连接请求,那么就进行一次循环。现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端。

二、Socket 变量
产生一个Socket,你需要三个变量:一个协议、一个socket类型和一个公共协议类型。

1、协议

AF_INET  //产生socket的协议,使用TCP或UDP来传输,用在IPv4的地址   

 AF_INET6  //产生socket的协议,使用TCP或UDP来传输,用在IPv6的地址   

 AF_UNIX  //本地协议,使用在Unix和Linux系统上,它很少使用,一般都是当客户端和服务器在同一台机器上的时候使用  

2、Socket类型

SOCK_STREAM  //这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。    

SOCK_DGRAM  //这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。    

SOCK_SEQPACKET  //这个协议是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。    

SOCK_RAW  //这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议)    

SOCK_RDM  //这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包顺序  

3、公共协议

ICMP  //互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信息   

 UDP  //用户数据报文协议,它是一个无连接,不可靠的传输协议    

TCP  //传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。  

三、Socket函数
1、socket_create
作用:产生一个socket,相当于产生一个socket的数据结构
用法:socket_create ( int domain, int type, int protocol )
参数:domain,协议;type,类型;protocol,公共协议
返回:socket resource on success, or FALSE on error

2、socket_bind
作用:把socket绑定在一个IP地址和端口上
用法:socket_bind ( resource socket, string address [, int port] )
参数:socket,socket resource;address,ip地址;port,端口
返回:Boolean

3、socket_accept
作用:接受一个Socket连接
用法:socket_accept ( resource socket )
参数:socket,socket resource
返回:Returns a new socket resource on success, or FALSE on error.

4、socket_connect()
作用:开始一个socket连接
用法:socket_connect ( resource socket, string address [, int port] )
参数:socket,socket resource;address,ip地址;port,端口
返回:Boolean

5、socket_listen
作用:监听由指定socket的所有连接
用法:socket_listen ( resource socket [, int backlog] )
参数:socket,socket resource;
返回:Boolean

6、socket_read
作用:读取指定长度的数据
用法:socket_read ( resource socket, int length [, int type] )
参数:socket,socket resource;length,字符长度;type,PHP_BINARY_READ |PHP_NORMAL_READ
返回:string

7、socket_write
作用:写数据到socket缓存
用法:socket_write ( resource socket, string buffer [, int length] )
参数:socket,socket resource;buffer,字符;length,字符长度;
返回:Boolean

8、socket_send()
作用:这个函数发送数据到已连接的socket
用法:socket_send ( resource socket, string buf, int len, int flags )
参数:socket,socket resource;buf,字符;len,字符长度;
返回:Boolean

9、socket_last_error
作用:获取当前socket的最后错误代码
用法:socket_last_error ( [resource socket] )
参数:socket,socket resource;
返回:int

10、socket_strerror
作用:返回指定错误号的详细错误
用法:socket_strerror ( int errno )
参数:errno,socket_last_error no;
返回:string

11、socket_close
作用:关闭一个socket资源
用法:socket_close ( [resource socket] )
参数:socket,socket resource;
返回:null

四、使用说明
确认打开socket方法
a、编辑php.ini文件,去掉 extension=php_sockets.dll 前面的注释:
b、代码来加载扩展库

if(!extension_loaded('sockets')) {     

    if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {        

          dl('php_sockets.dll');     

     }else{          

          dl('sockets.so');      

    }  }  

posted @ 2011-05-24 19:20 Sail 阅读(216) 评论(0) 编辑
在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于404状态页面设置不正常,导致了google管理员工具无法验证的情况,当然,影响的不仅仅是这一方面,影响的更是网站的整体浏览效果。因此,比较清楚详细的了解http状态码的具体含义,对于一个网站站长来说,这是很有必要俱备的网站制作基础条件。

  如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返回 HTTP 状态码响应请求。

  此状态码提供关于请求状态的信息,告诉 Googlebot 关于您的网站和请求的网页的信息。

  一些常见的状态码为:

  200 - 服务器成功返回网页

  404 - 请求的网页不存在

  503 - 服务器超时

  下面提供 HTTP 状态码的完整列表。点击链接可了解详情。您也可以访问 HTTP 状态码上的 W3C 页获取更多信息。

  1xx(临时响应)

  表示临时响应并需要请求者继续执行操作的状态码。

  100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

  101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。

  2xx (成功)

  表示成功处理了请求的状态码。

  200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。

  201(已创建)请求成功并且服务器创建了新的资源。

  202(已接受)服务器已接受请求,但尚未处理。

  203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。

  204(无内容)服务器成功处理了请求,但没有返回任何内容。

  205(重置内容)服务器成功处理了请求,但没有返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。

  206(部分内容)服务器成功处理了部分 GET 请求。

  3xx (重定向)

  要完成请求,需要进一步操作。通常,这些状态码用来重定向。Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。

  300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

  301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。

  302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。

  303(查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。

  304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

  如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。

  .

  305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。

  307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。

  4xx(请求错误)

  这些状态码表示请求可能出错,妨碍了服务器的处理。

  400(错误请求)服务器不理解请求的语法。

  401(未授权)请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。

  403(禁止)服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码(您可以在 Google 网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝了 Googlebot 访问。

  404(未找到)服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。

  如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签的 robots.txt 页上看到此状态码,则这是正确的状态码。但是,如果您有 robots.txt 文件而又看到此状态码,则说明您的 robots.txt 文件可能命名错误或位于错误的位置(该文件应当位于顶级域,名为 robots.txt)。

  如果对于 Googlebot 抓取的网址看到此状态码(在"诊断"标签的 HTTP 错误页面上),则表示 Googlebot 跟随的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。

  405(方法禁用)禁用请求中指定的方法。

  406(不接受)无法使用请求的内容特性响应请求的网页。

  407(需要代理授权)此状态码与 401(未授权)类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。

  408(请求超时)服务器等候请求时发生超时。

  409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表。

  410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。

  411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。

  412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。

  413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

  414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。

  415(不支持的媒体类型)请求的格式不受请求页面的支持。

  416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态码。

  417(未满足期望值)服务器未满足"期望"请求标头字段的要求。

  5xx(服务器错误)

  这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

  500(服务器内部错误)服务器遇到错误,无法完成请求。

  501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。

  502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。

  503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。

  504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。

  505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。

  上书大部分实际内容源自googel管理员博客近日文章所引用的有关301说明的有些链接,感觉非常有用,因此收藏注释,以备以后警戒注意学习。合理利用这些状态码,避免错误利用,必将会为你的网站带来更佳的浏览者体会,得到更加亲和的搜索引擎收录,得到更准确的搜索引擎切入,从而,为你的网站发展,奠定坚实的发展基础。

posted @ 2011-05-24 19:18 Sail 阅读(14) 评论(0) 编辑

robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容。

当一个搜索机器人(有的叫搜索蜘蛛)访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,那么搜索机器人就沿着链接抓取。

另外,robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。

robots.txt写作语法

首先,我们来看一个robots.txt范例:http://www.csswebs.org/robots.txt

访问以上具体地址,我们可以看到robots.txt的具体内容如下:

# Robots.txt file from http://www.csswebs.org
# All robots will spider the domain

User-agent: *
Disallow:

以上文本表达的意思是允许所有的搜索机器人访问www.csswebs.org站点下的所有文件。

具体语法分析:其中#后面文字为说明信息;User-agent:后面为搜索机器人的名称,后面如果是*,则泛指所有的搜索机器人;Disallow:后面为不允许访问的文件目录。

下面,我将列举一些robots.txt的具体用法:

允许所有的robot访问

User-agent: *
Disallow:

或者也可以建一个空文件 “/robots.txt” file

禁止所有搜索引擎访问网站的任何部分

User-agent: *
Disallow: /

禁止所有搜索引擎访问网站的几个部分(下例中的01、02、03目录)

User-agent: *
Disallow: /01/
Disallow: /02/
Disallow: /03/

禁止某个搜索引擎的访问(下例中的BadBot)

User-agent: BadBot
Disallow: /

只允许某个搜索引擎的访问(下例中的Crawler)

User-agent: Crawler
Disallow:

User-agent: *
Disallow: /

另外,我觉得有必要进行拓展说明,对robots meta进行一些介绍:

Robots META标签则主要是针对一个个具体的页面。和其他的META标签(如使用的语言、页面的描述、关键词等)一样,Robots META标签也是放在页面的<head></head>中,专门用来告诉搜索引擎ROBOTS如何抓取该页的内容。

Robots META标签的写法:

Robots META标签中没有大小写之分,name=”Robots”表示所有的搜索引擎,可以针对某个具体搜索引擎写为name=”BaiduSpider”。 content部分有四个指令选项:index、noindex、follow、nofollow,指令间以“,”分隔。

INDEX 指令告诉搜索机器人抓取该页面;

FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去;

Robots Meta标签的缺省值是INDEX和FOLLOW,只有inktomi除外,对于它,缺省值是INDEX,NOFOLLOW。

这样,一共有四种组合:

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,FOLLOW”>
<META NAME=”ROBOTS” CONTENT=”INDEX,NOFOLLOW”>
<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>

其中

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>可以写成<META NAME=”ROBOTS” CONTENT=”ALL”>;

<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>可以写成<META NAME=”ROBOTS” CONTENT=”NONE”>

目前看来,绝大多数的搜索引擎机器人都遵守robots.txt的规则,而对于Robots META标签,目前支持的并不多,但是正在逐渐增加,如著名搜索引擎GOOGLE就完全支持,而且GOOGLE还增加了一个指令“archive”,可以限制GOOGLE是否保留网页快照。例如:

<META NAME=”googlebot” CONTENT=”index,follow,noarchive”>

posted @ 2011-05-24 19:17 Sail 阅读(21) 评论(0) 编辑

最新资讯 最新游戏 最新网页游戏