<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post//</link>
<title><![CDATA[Windows Socket 网络编程(二) —— 套接字编程原理]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[Web 技术 ]]></category>
<pubDate>Fri, 10 Feb 2012 09:20:29 +0000</pubDate> 
<guid>https://atim.cn/post//</guid> 
<description>
<![CDATA[ 
	一、客户机/服务器模式<br/>在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点：1、非对等作用；2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式：<br/><br/>首先服务器方要先启动，并根据请示提供相应服务：（过程如下）<br/>1、打开一通信通道并告知本地主机，它愿意在某一个公认地址上接收客户请求。<br/>2、等待客户请求到达该端口。<br/>3、接收到重复服务请求，处理该请求并发送应答信号。<br/>4、返回第二步，等待另一客户请求<br/>5、关闭服务器。<br/>客户方：<br/>1、打开一通信通道，并连接到服务器所在主机的特定端口。<br/>2、向服务器发送服务请求报文，等待并接收应答；继续提出请求……<br/>3、请求结束后关闭通信通道并终止。<br/><br/>二、基本套接字<br/>为了更好说明套接字编程原理，给出几个基本的套接字，在以后的篇幅中会给出更详细的使用说明。<br/>1、创建套接字——socket()<br/>功能：使用前创建一个新的套接字<br/>格式：SOCKET PASCAL FAR socket(int af,int type,int procotol);<br/>参数：af: 通信发生的区域<br/>type: 要建立的套接字类型<br/>procotol: 使用的特定协议<br/><br/>2、指定本地地址——bind()<br/>功能：将套接字地址与所创建的套接字号联系起来。<br/>格式：int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);<br/>参数：s: 是由socket()调用返回的并且未作连接的套接字描述符（套接字号）。<br/>其它：没有错误，bind()返回0，否则SOCKET_ERROR<br/>地址结构说明：<br/>struct sockaddr_in<br/>&#123;<br/>short sin_family;//AF_INET<br/>u_short sin_port;//16位端口号，网络字节顺序<br/>struct in_addr sin_addr;//32位IP地址，网络字节顺序<br/>char sin_zero[8];//保留<br/>&#125;<br/><br/>3、建立套接字连接——connect()和accept()<br/>功能：共同完成连接工作<br/>格式：int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);<br/>SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);<br/>参数：同上<br/><br/>4、监听连接——listen()<br/>功能：用于面向连接服务器，表明它愿意接收连接。<br/>格式：int PASCAL FAR listen(SOCKET s, int backlog);<br/><br/>5、数据传输——send()与recv()<br/>功能：数据的发送与接收<br/>格式：int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);<br/>int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);<br/>参数：buf:指向存有传输数据的缓冲区的指针。<br/><br/>6、多路复用——select()<br/>功能：用来检测一个或多个套接字状态。<br/>格式：int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds,<br/>fd_set FAR * exceptfds,const struct timeval FAR * timeout);<br/>参数：readfds:指向要做读检测的指针<br/>writefds:指向要做写检测的指针<br/>exceptfds:指向要检测是否出错的指针<br/>timeout:最大等待时间<br/><br/>7、关闭套接字——closesocket()<br/>功能：关闭套接字s<br/>格式：BOOL PASCAL FAR closesocket(SOCKET s);<br/><br/>三、典型过程图<br/>2.1 面向连接的套接字的系统调用时序图<br/><br/><a href="https://atim.cn/attachment.php?fid=38" target="_blank"><img src="https://atim.cn/attachment.php?fid=38" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>2.2 无连接协议的套接字调用时序图<br/><br/><a href="https://atim.cn/attachment.php?fid=39" target="_blank"><img src="https://atim.cn/attachment.php?fid=39" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>2.3 面向连接的应用程序流程图<br/><a href="https://atim.cn/attachment.php?fid=40" target="_blank"><img src="https://atim.cn/attachment.php?fid=40" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>原文地址: http://www.vckbase.com/document/viewdoc/?id=484
]]>
</description>
</item><item>
<link>https://atim.cn/post//#blogcomment</link>
<title><![CDATA[[评论] Windows Socket 网络编程(二) —— 套接字编程原理]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://atim.cn/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>