- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
将Socket应用程序从Unix向Windows移植中应注意的几点问题
套接字(socket)当今已成为最流行的网络通信应用程序接口。套接字最初是
由加利福尼亚大学Berkeley分校为Unix操作系统开发的网络通信接口,后来它又被
移植到DOS与Windows系统,特别是近几年来互联网络在全世界范围内被广泛普及并
且增长迅猛,进一步奠定了它在网络通信程序开发领域的主宰地位。跨系统网络互
联的呼声在我国也越来越高。近来,在开发的银行与证券联网系统中,我们尝试做
了由Unix Sockets到Windows Sockets通信应用程序的移植,有所体会,望能将移植
过程中应该注意的几点问题与热心于这方面工作的人们共同作以探讨,以期能起到
抛砖引玉的作用。
修改头文件的定义
在Unix Sockets应用程序中包含头文件的语句为#includesys/socket.h,而在
Windows Sockets应用程序中相应语句应为 #includewinsock.h。
Windows Sockets的实现由两部分组成,即开发组件与运行组件。开发组件是供程序
员开发Windows Sockets 应用程序使用的,它包括Windows Sockets应用程序接口函
数库、头文件以及一些介绍Windows Sockets实现的文档,其中头文件winsock.h中
包含了Windows Sockets 实现所定义的宏、常数值、数据结构和函数调用接口原型。
Winsock.h是编写Windows Sockets应用程序必须包含的头文件。
Windows Sockets DLL初始化与资源释放
在Windows Sockets的接口函数中,提供了WSAStartup()与WSACleanup()两个函数,
用于在程序开始时初始化Windows Sockets DLL和程序结束时释放Windows Sockets DLL
资源,它们是编写Windows Sockets应用程序时必须使用的两个函数。
将套接字的类型由int改为SOCKET
在Unix系统中,套接字类型定义为int型,而在Windows系统中,套接字类型被定义
为SOCKET型,即unsigned int型。
错误码的获取与设置
在Unix系统中,获取、设置错误码使用全局变量errno,而在Windows系统中则应将
其改为用函数WSAGetLastError()和WSASetLastError()。Windows Sockets 为了与多
线程环境兼容,提供了两个出错处理函数WSAGetLastError()与WSASetLastError()来
获取与设置当前线程的最近错误号,而不再使用Unix系统中的全局变量errno和h_errno。
关闭套接字
在Unix系统中使用close()函数来关闭套接字,而在Windows系统中则用closesocket()函数。
对套接字的控制
在Unix系统中,使用ioctl()函数和fcntl()函数实现对套接字的控制,而在Windows系
统中则应使用ioctlsocket()函数。
getsockopt()和setsockopt()函数的处理
在Unix Sockets和Windows Sockets中对这两个函数提供的支持不同。在Windows
Sockets中getsockopt()与setsockopt()不支持的Berkeley Sockets选项有:
SO_RCVLOWAT 接受低潮标志
SO_RCVTIMEO 接受超时
SO_SNDLOWAT 发送低潮标志
SO_SNDTIMEO 发送超时
IP_OPTIONS 取得IP头中的选项
TCP_MAXSEG 取得TCP最大尺寸
SO_ACCEPTCONN 套接字正在监听
SO_ERROR 取错误状态并清除
SO_TYPE 套接字类型
使用不支持的选项将返回错误码WSAENOPROTOOPT,它由WSAGetLastError()函数返回。
由于提供的支持不同,进行移植时若有必要应修改相应的源程序。
使用宏FD_XXX来控制fd_set结构
由于Windows Sockets 某些函数在接口上虽然与Unix Sockets一致,但是它们的
内部实现却不一样,例如,在函数select()的参数中,Unix Sockets实现套接字
集合使用的是位掩码,但在Windows Sockets中却是使用一个SOCKET的数组。虽
然套接字的集合仍由fd_set类型表示,但在Unix Sockets 源文件中直接修改
fd_set结构的代码在Windows Sockets环境下将不能正常工作。因此,在进行移植时
应将源程序中对结构fd_set的直接修改改为通过使用FD_X
您可能关注的文档
- 导数在函数研究函数中的应用学案单调性(1).doc
- 导数在函数研究函数中的应用学案单调性(2).doc
- 导数应用经典例题教师.doc
- 导数应用之单调性.ppt
- 导数的应用(导学案).doc
- 导数的综合应用2.docx
- 小学六年级奥数题-小学奥数应用题专题汇总.doc
- 小学六年级应用题练习.docx
- 小学六年级应用题集锦1234.doc
- 小学四年级应用题(3).doc
- 03 专题五 牛顿第二定律的综合应用 【正文】听课手册.pdf
- 03 第16讲 机械能守恒定律及其应用 【正文】听课手册.pdf
- 04 实验十三 利用传感器制作简单的自动控制装置 【正文】听课手册.pdf
- 03 专题十六 带电粒子在有界匀强磁场中的运动 【正文】听课手册.pdf
- 03 专题十四 电学实验基础 【正文】听课手册.pdf
- 07 实验十二 测量电源的电动势和内阻 【正文】听课手册.pdf
- 06 实验五 探究平抛运动的特点 【正文】听课手册.pdf
- 07 实验三 探究两个互成角度的力的合成规律 【正文】听课手册.pdf
- 05 实验十 测量金属丝的电阻率 【正文】听课手册.pdf
- 06 实验二 探究弹簧弹力与形变量的关系 【正文】听课手册.pdf
文档评论(0)