文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++socket编程原理
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C#数据库操作的三种经典用法
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
·TCP/IP网络重复型服务器通信软件的设计
·DirectX游戏开发入门
·经典与现代的结合:在MFC中集成RAD .NET框架
·Windows API-GDI入门基础知识详解(2)
·Visual C++ 入门精解
·C#基础概念二十五问
·用C#实现pdf文件的完整性验证
·成为嵌入式程序员应知道的0x10个问题
·TCP/IP编程实现远程文件传输
热点TOP10
·C#基础概念二十五问
·TCP/IP编程实现远程文件传输
·socket编程原理
·Beej的网络socket编程指南
·如何用C#编写文本编辑器
·C/C++笔试、面试题目大汇总
·c#的random shuffle
·C#编写的windows计算器-源代码
·改编 的 C版 职工管理系统
·C语言的常用库函数使用方法分析及用途
·C# GridView 排序及分页
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·Visual C++ 实现数字化图像的分割
·C语言编程常见问题解答(目录)
·C语言图形函数
·扑克牌的发牌程序(用伪随机数实现)
·飞机订票系统设计
·用C#下的Raw Socket编程实现网络封包监视
·DirectX游戏开发入门
·Windows下C语言网络编程快速入门

socket编程原理

日期:2007年7月24日 作者: 查看:[大字体 中字体 小字体]



参数s为本地套接字描述符,在用做accept()调用的参数前应该先调用过listen()。addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。如果没有错误发生, accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。否则返回值INVALID_SOCKET。

accept()用于面向连接服务器。参数addr和addrlen存放客户方的地址信息。调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect ()调用发出的。当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。

有关accept()的详细描述参看5.2.1。

四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。socket ()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();钥纪纪户方,若采用面向连接,则可以不调用bind(),而通过 connect()自动完成。若采用无连接,客户方必须使用bind()以获得一个唯一的地址。

以上讨论仅对客户/服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。

3.4 监听连接──listen()
此调用用于面向连接服务器,表明它愿意接收连接。listen()需在accept()之前调用,其调用格式如下:

int PASCAL FAR listen(SOCKET s, int backlog);

参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。如果没有错误发生,listen()返回0。否则它返回SOCKET_ERROR。

listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。

调用listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用socket()分配一个流套接字,且调用bind()给s赋于一个名字之后调用,而且一定要在accept()之前调用。

有关listen()的详细描述参看5.2.13。

2.3节中提到钥纪纪户/服务器模式中,有两种类型的服务:重复服务和并发服务。accept()调用为实现并发服务提供了极大方便,因为它要返回一个新的套接字号,其典型结构为:

int initsockid, newsockid;

if ((initsockid = socket(....)) < 0)

error(“can’t create socket”);

if (bind(initsockid,....) < 0)

error(“bind error”);

if (listen(initsockid , 5) < 0)

error(“listen error”);

for (; {

newsockid = accept(initsockid, ...) /* 阻塞 */

if (newsockid < 0)

error(“accept error“);

if (fork() == 0){ /* 子进程 */

closesocket(initsockid);

do(newsockid); /* 处理请求 */

exit(0);

}

closesocket(newsockid); /* 父进程 */

}


这段程序执行的结果是newsockid与客户的套接字建立相关,子进程启动后,关闭继承下来的主服务器的initsockid,并利用新的 newsockid与客户通信。主服务器的initsockid可继续等待新的客户连接请求。由于在Unix等抢先多任务系统中,在系统调度下,多个进程可以同时进行。因此,使用并发服务器可以使服务器进程在同一时间可以有多个子进程和不同的客户程序连接、通信。钥纪纪户程序看来,服务器可以同时并发地处理多个客户的请求,这就是并发服务器名称的来由。

面向连接服务器也可以是重复服务器,其结构如下:

int initsockid, newsockid;

if ((initsockid = socket(....))<0)

error(“can’t create socket”);

if (bind(initsockid,....)<0)

error(“bind error”);

if (listen(initsockid,5)<0)

error(“listen error”);

for (; {

newsockid = accept(initsockid, ...) /* 阻塞 */

if (newsockid < 0)

error(“accept error“);

do(newsockid); /* 处理请求 */

closesocket(newsockid);

}

重复服务器在一个时间只能和一个客户程序建立连接,它对多个客户程序的处理是采用循环的方式重复进行,因此叫重复服务器。并发服务器和重复服务器各有利弊:并发服务器可以改善客户程序的响应速度,但它增加了系统调度的开销;重复服务器正好与其相反,因此用户在决定是使用并发服务器还是重复服务器时,要根据应用的实际情考网考网来定。

3.5 数据传输──send()与recv()
当一个连接建立以后,就可以传输数据了。常用的系统调用有send()和recv()。

send()调用用于钥纪纪数s指定的已连接的数据报或流套接字上发送输出数据,格式如下:

上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页 




上一篇:c++中函数重载的相关知识

下一篇:用BCB开发有身份认证功能的Email程序

socket编程原理 相关文章:
·6招教你准确揣摩他人心理
·人生哲理名言生活哲理短文
·改变一生的100句至理名言
·果然更高效!Vista磁盘碎片整理亲历记
·不再怕电脑病毒 电脑中毒后的6招处理方法
·轻松做画家!用Photoshop把照片处理成逼真的素描画
·人生哲理小语
·socket编程原理
·仅用U盘就可以去除XP管理员密码
·Photoshop将肖像照片处理为超酷个性海报
socket编程原理 相关软件:
·曾仕强 - 超世纪大易管理学(3-6)
·周恩来总理经典图片集
·时代光华 销售管理课程(1-5)
·公司企业网站管理系统模板功能强大版
·俞敏洪做人道理mp3
·国家地理杂志100张最佳照片合辑
·余世维《成功经理人讲座》完整电子书
·成就你一生的100个哲理
·时代光华-卓越的现场管理 5S推行实务(刘敏欣)(下)
·冠军足球经理4(Championship Manager 4)中文版

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn