Windows Sockets API实现网络异步通讯

2016-01-29 12:43 13 1 收藏

Windows Sockets API实现网络异步通讯,Windows Sockets API实现网络异步通讯

【 tulaoshi.com - C语言心得技巧 】

  一、 引言

  在80年代初,美国加利福尼亚大学伯克利分校的研究人员为TCP/IP网络通信开发了一个专门用于网络通讯开发的API。这个API就是Socket接口(套接字)--当今在TCP/IP网络最为通用的一种API,也是在互联网上进行应用开发最为通用的一种API。在微软联合其它几家公司共同制定了一套Windows下的网络编程接口Windows Sockets规范后,由于在其规范中引入了一些异步函数,增加了对网络事件异步选择机制,因此更加符合Windows的消息驱动特性,使网络开发人员可以更加方便的进行高性能网络通讯程序的设计。本文接下来就针对Windows Sockets API进行面向连接的流式套接字编程以及对异步网络通讯的编程实现等问题展开讨论。

  二、 面向连接的流式套接字编程模型的设计

  本文在方案选择上采用了在网络编程中最常用的一种模型--客户机/服务器模型。这种客户/服务器模型是一种非对称式编程模式。该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。

  本文选取了基于TCP/IP的客户机/服务器模型和面向连接的流式套接字。其通信原理为:服务器端和客户端都必须建立通信套接字,而且服务器端应先进入监听状态,然后客户端套接字发出连接请求,服务器端收到请求后,建立另一个套接字进行通信,原来负责监听的套接字仍进行监听,如果有其它客户发来连接请求,则再建立一个套接字。默认状态下最多可同时接收5个客户的连接请求,并与之建立通信关系。因此本程序的设计流程应当由服务器首先启动,然后在某一时刻启动客户机并使其与服务器建立连接。服务器与客户机开始都必须调用Windows Sockets API函数socket()建立一个套接字sockets,然后服务器方调用bind()将套接字与一个本地网络地址捆扎在一起,再调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长度。在此之后服务器就可以通过调用accept()来接收客户机的连接。

  相对于服务器,客户端的工作就显得比较简单了,当客户端打开套接字之后,便可通过调用connect()和服务器建立连接。连接建立之后,客户和服务器之间就可以通过连接发送和接收资料。最后资料传送结束,双方调用closesocket()关闭套接字来结束这次通讯。整个通讯过程的具体流程框图可大致用下面的流程图来表示:


        面向连接的流式套接字编程流程示意图

来源:http://www.tulaoshi.com/n/20160129/1487328.html

延伸阅读
包装器实现 包装器实现是一种将它们的实际工作委托给一个特定 对象集 的实现,它在该 对象集 所提供的功能之上又增加了额外的功能。 对design patterns(设计样式) 爱好者来说,这是一个 decorator(油漆工) 样式。虽然有点异国情调,但确实简单明了。 !-- frame contents -- !-- /frame contents -- ...
br> 许多程序员永远不需要实现他们自己的 对象集 类。用本课程上面所描述的实现,你可以做得非常好。然而,有一天,你可能发现你要编写一个你自己的核心 对象集 接口的实现。用由Java平台提供的 abstract implementations(抽象实现),这一点很轻易办到。但是,在我们要讨论如何编写一个实现之前,让我们先讨论一下为什么你要做这样一件事。...
在应用开发中,经常用到ListView去加载数据,加载图片和文字是比较常见的,文字还好,图片从网络请求加载速度比较慢,所以需要把图片的加载放到另一个线程中去执行,执行完了再更新UI线程。以下列出一个我在项目中使用到的异步加载图片的解决方案,代码没有上全,给出核心部分。 大致思路是这样 : 1.利用软引用来缓存图片Bitmap,用图片的UR...
标签: PHP
用PHP实现Soap通讯 近日用PHP实现Soap通讯,写了一些简单的方法:引用文字 <? phpfunction HttpSoap($server, $port, $url, $namespace, $action, $data) {$fp = @fsockopen($server, $port);if (!$fp) {return FALSE;} else {$soapData = ConstructData($namespace, $action, $data);$length = strlen($soapData);$out = &qu...
标签: ASP
  w3Sockets是写著名JMAIL邮件组件开发者开发的又一免费实用的ASP组件。 需要下载的朋友可以在这里下载: http://www.dimac.net/FreeDownloads/dlstart.asp?ProductID=2 下载后解压,运行SocketReg.exe注册组件。 这里主要介绍如何用该组件WHOIS域名,目前网上很多域名查询系统都是通过XMLHTTP获得其他网页数据,而获得记录。其实,我...

经验教程

222

收藏

5
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部