选择显示字体大小

windows socket1.1 程序设计

[文章导读]windows sockets 是从 berkeley sockets 扩展而来的,其在继承 berkeley sockets 的基础上,又进行了新的扩充

一、简介

windows sockets 是从 berkeley sockets 扩展而来的,其在继承 berkeley sockets 的基础上,又进行了新的扩充。这些扩充主要是提供了一些异步函数,并增加了符合windows消息驱动特性的网络事件异步选择机制。

windows sockets由两部分组成:开发组件和运行组件。

开发组件:windows sockets 实现文档、应用程序接口(api)引入库和一些头文件。

运行组件:windows sockets 应用程序接口的动态链接库(winsock.dll)。

二、主要扩充说明

1、异步选择机制:

windows sockets 的异步选择函数提供了消息机制的网络事件选择,当使用它登记网络事件发生时,应用程序相应窗口函数将收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。

windows sockets 提供了一个异步选择函数 wsaasyncselect(),用它来注册应用程序感兴趣的网络事件,当这些事件发生时,应用程序相应的窗口函数将收到一个消息。

函数结构如下:

int pascal far wsaasyncselect(socket s,hwnd hwnd,unsigned int wmsg,long levent);

参数说明:

hwnd:窗口句柄

wmsg:需要发送的消息

levent:事件(以下为事件的内容)

值:含义:
fd_read期望在套接字上收到数据(即读准备好)时接到通知
fd_write期望在套接字上可发送数据(即写准备好)时接到通知
fd_oob期望在套接字上有带外数据到达时接到通知
fd_accept期望在套接字上有外来连接时接到通知
fd_connect期望在套接字连接建立完成时接到通知
fd_close期望在套接字关闭时接到通知

例如:我们要在套接字读准备好或写准备好时接到通知,语句如下:

rc=wsaasyncselect(s,hwnd,wmsg,fd_readfd_write);

如果我们需要注销对套接字网络事件的消息发送,只要将 levent 设置为0

2、异步请求函数

在 berkeley sockets 中请求服务是阻塞的,windows sickets 除了支持这一类函数外,还增加了相应的异步请求函数(wsaasyncgetxbyy();)。

3、阻塞处理方法

windows sockets 为了实现当一个应用程序的套接字调用处于阻塞时,能够放弃cpu让其它应用程序运行,它在调用处于阻塞时便进入一个叫“hook”的例程,此例程负责接收和分配windows消息,使得其它应用程序仍然能够接收到自己的消息并取得控制权。

windows 是非抢先的多任务环境,即若一个程序不主动放弃其控制权,别的程序就不能执行。因此在设计windows sockets 程序时,尽管系统支持阻塞操作,但还是反对程序员使用该操作。但由于 sun 公司下的 berkeley sockets 的套接字默认操作是阻塞的,windows 作为移植的 sockets 也不可避免对这个操作支持。

在windows sockets 实现中,对于不能立即完成的阻塞操作做如下处理:dll初始化→循环操作。在循环中,它发送任何 windows 消息,并检查这个 windows sockets 调用是否完成,在必要时,它可以放弃cpu让其它应用程序执行(当然使用超线程的cpu就不会有这个麻烦了^_^)。我们可以调用 wsacancelblockingcall() 函数取消此阻塞操作。

在 windows sockets 中,有一个默认的阻塞处理例程 blockinghook() 简单地获取并发送 windows 消息。如果要对复杂程序进行处理,windows sockets 中还有 wsasetblockinghook() 提供用户安装自己的阻塞处理例程能力;与该函数相对应的则是 swaunhookblockinghook(),它用于删除先前安装的任何阻塞处理例程,并重新安装默认的处理例程。请注意,设计自己的阻塞处理例程时,除了函数 wsacancelblockinghook() 之外,它不能使用其它的 windows sockets api 函数。在处理例程中调用 wsacancelblockinghook()函数将取消处于阻塞的操作,它将结束阻塞循环。

4、出错处理

windows sockets 为了和以后多线程环境(windows/unix)兼容,它提供了两个出错处理函数来获取和设置当前线程的最近错误号。(wsagetlasteror()和wsasetlasterror())

5、启动与终止

使用函数 wsastartup() 和 wsacleanup() 启动和终止套接字。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons