Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497813
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:56:55

下载本文示例代码
  计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换。   我们要讨论的第一个结构类型是:struct sockaddr,该类型是用来保存socket信息的:   struct sockaddr {   unsigned short sa_family; /* 地址族, AF_xxx */   char sa_data[14]; /* 14 字节的协议地址 */ };   sa_family一般为AF_INET;sa_data则包含该socket的IP地址和端口号。   另外还有一种结构类型:   struct sockaddr_in {    short int sin_family; /* 地址族 */    unsigned short int sin_port; /* 端口号 */    struct in_addr sin_addr; /* IP地址 */    unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */   };   这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。   我们下面讨论几个字节顺序转换函数:   htons()--"Host to Network Short" ; htonl()--"Host to Network Long"   ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"   在这里, h表示"host" ,n表示"network",s 表示"short",l表示 "long"。   打开socket 描述符、建立绑定并建立连接   socket函数原型为:   int socket(int domain, int type, int protocol);   domain参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM;protocol通常赋值“0”。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。   一旦通过socket调用返回一个socket描述符,你应该将该socket与你本机上的一个端口相关联(往往当你在设计服务器端程序时需要调用该函数。随后你就可以在该端口监听服务请求;而客户端一般无须调用该函数)。zmbbs=1;共2页。 1 2 :   计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换。   我们要讨论的第一个结构类型是:struct sockaddr,该类型是用来保存socket信息的:   struct sockaddr {   unsigned short sa_family; /* 地址族, AF_xxx */   char sa_data[14]; /* 14 字节的协议地址 */ };   sa_family一般为AF_INET;sa_data则包含该socket的IP地址和端口号。   另外还有一种结构类型:   struct sockaddr_in {    short int sin_family; /* 地址族 */    unsigned short int sin_port; /* 端口号 */    struct in_addr sin_addr; /* IP地址 */    unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */   };   这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。   我们下面讨论几个字节顺序转换函数:   htons()--"Host to Network Short" ; htonl()--"Host to Network Long"   ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"   在这里, h表示"host" ,n表示"network",s 表示"short",l表示 "long"。   打开socket 描述符、建立绑定并建立连接   socket函数原型为:   int socket(int domain, int type, int protocol);   domain参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM;protocol通常赋值“0”。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。   一旦通过socket调用返回一个socket描述符,你应该将该socket与你本机上的一个端口相关联(往往当你在设计服务器端程序时需要调用该函数。随后你就可以在该端口监听服务请求;而客户端一般无须调用该函数)。zmbbs=1;共2页。 1 2 : 下载本文示例代码


Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义Socket编程相关数据类型定义
阅读(92) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~