网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程 |
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint |
当前位置 > 网站建设学院 > 网络编程 > C/C++ |
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket |
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发 |
|
何时必须转换字节顺序在下列情况中需要转换字节顺序:
何时不必转换字节顺序在下列情况下可以免去转换字节顺序的工作:
注重 当通信的另一端不是 MFC 应用程序时,也必须避免将从 CObject 派生的 C++ 对象以流的形式输入存 档,因为接收端无法处理它们。请参见 Windows Sockets:使用带存档的套接字中的说明。有关字节顺序的更多信息,请参见 Platform SDK 中的 Windows Sockets 规范。 字节顺序转换示例下面的示例显示使用存档的 CSocket 对象的一个序列化函数。它还阐释了在 Windows Sockets API 中如何使用 字节顺序转换函数。 该示例显示这样的情形:您正在编写与非 MFC 服务器应用程序通信的客户程序,而您没有访问该服务器应用程序 源代码的权限。在这种情况下,必须假设非 MFC 服务器使用标准的网络字节顺序。相反,MFC 客户端应用程序对 CSocket 对象使用 CArchive 对象,而 CArchive 使用与网络标准相反的“Little-Endian”字节顺序。 假设要与之通信的非 MFC 服务器具有如下已建立的消息包协议: strUCt Message { long MagicNumber; unsigned short Command; short Param1; long Param2; };上述内容用 MFC 术语表示则为: struct Message { long m_lMagicNumber; short m_nCommand; short m_nParam1; long m_lParam2; void Serialize ( CArchive& ar ); }; 在 C++ 中, struct 和类在本质上是一回事。 Message 结构可以有成员函数,如以上声明的 Serialize 成员函数。
Serialize 成员函数可能为如下形式: void Message::Serialize(CArchive& ar)
该示例要求进行数据字节顺序转换,因为一端的非 MFC 服务器应用程序的字节排序与另一端在 MFC 客户端应用程序中使用的 CArchive 明显不匹配。该示例阐释了 Windows Sockets 提供的几个字节顺序转换函数。下表描述了这些函数。
Windows Sockets 字节顺序转换函数
ntohs
将 16 位数量从网络字节顺序转换为主机字节顺序(从 Big-Endian 转换为 Little-Endian)。
ntohl
将 32 位数量从网络字节顺序转换为主机字节顺序(从 Big-Endian 转换为 Little-Endian)。
htons
将 16 位数量从主机字节顺序转换为网络字节顺序(从 Little-Endian 转换为 Big-Endian)。
htonl
将 32 位数量从主机字节顺序转换为网络字节顺序(从 Little-Endian 转换为 Big-Endian)。
此示例的另一个要点是,当通信另一端的套接字应用程序为非 MFC 应用程序时,必须避免出现如下列语句的操作: ar pMsg;
这里的 pMsg 是指向从 CObject 类派生的 C++ 对象的指针。这将发送多余的与对象关联的 MFC 信息,而服务器并不理解这些信息,因为只有服务器是 MFC 应用程序时才理解。
有关更多信息,请参见:
|
![]() |