将Socket应用程序从Unix向Windows移植中应注意的几点问.docx

将Socket应用程序从Unix向Windows移植中应注意的几点问.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档