文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程CGI/PerlLinux系统环境下的Socket编程详细解析
精品推荐
特别推荐
·在CGI中如何使用cookie的方法
·CGI脚本在WIN2000、WINNT下安装
热点TOP10
·cgic: 为C语言编写CGI的C函数库
·Perl实例:
·在CGI中实现session的想法和实现
·Perl的简单语法(与C语言语法的异同)
·在CGI中如何使用cookie的方法
·perl与Mysql连接
·Perl 新手必读
·关于我和刘思平发现的xx(www.xxxxxxx.com)的cgi漏洞
·Linux系统环境下的Socket编程详细解析
·cgilib例
·perl连接access数据库
·关于GD模块的语法和使用
·在winnt/win9x下用blat发email的示例
·购建ASP、CGI、PHP+MySQL运行环境——服务器运行环境配置全攻略(二)
·关于CGI读写COOKIE的编程
·CGI 拒绝服务攻击技术浅析
·如何安装DBI和DBD包
·Perl/Tk FAQ - 7. 哪里有Perl/Tk的文档
·简单的PERL-ADO例子
·用Perl写出自己的安全工具--初级

Linux系统环境下的Socket编程详细解析

日期:2007年7月28日 作者: 查看:[大字体 中字体 小字体]


什么是Socket

  Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。

  Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

  Socket建立

  为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:

  int socket(int domain, int type, int protocol);

  domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。

  Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。

  两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

  Socket配置

  通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。
Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind函数原型为:

  

int bind(int sockfd,struct sockaddr *my_addr, int addrlen); 
  Sockfd是调用socket函数返回的socket描述符, my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针; addrlen常被设置为sizeof(struct sockaddr)。
  struct sockaddr结构类型是用来保存socket信息的:
  struct sockaddr {
   unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
  sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;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的指针;或者相反。

  使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:

  my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */
  my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */
通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。同样,通过将my_addr.sin_addr.s_addr置为INADDR_ANY,系统会自动填入本机IP地址。

  注意在使用bind函数是需要将sin_port和sin_addr转换成为网络字节优先顺序;而sin_addr则不需要转换。

  计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换,否则就会出现数据不一致。

  下面是几个字节顺序转换函数:

[1] [2] [3] [4] [5] [6] 下一页 




上一篇:用机器生成的音乐监控Linux 计算机

下一篇:母亲节-母亲节由来-母亲节知识

Linux系统环境下的Socket编程详细解析 相关文章:
·最详细的黑客入门法则
·XP系统运行慢?小编自用7招解决
·将系统装到U盘中 如何自制XP@USB启动盘
·不用重装XP系统就可以解决全部故障
·学生成绩管理系统实习
·Vista系统使用技巧总结
·VB+Access设计图书管理系统
·打造极速XP系统之绝对秘籍
·提高运行速度 教你一步一步优化XP系统
·侵入最大的六合彩论坛系统---六合专用BBS
Linux系统环境下的Socket编程详细解析 相关软件:
·学校源码管理系统超靓版V2008
·如何安装双系统
·方正飞腾集成排版系统V4.1
·卡丽来相片VCD制作系统 2003
·电脑装机、系统维护工具盘 2003版
·公司企业网站管理系统模板功能强大版
·Windows环境下32位汇编语言程序设计
·鸟哥的linux私房菜:基础学习篇
·远潮自我形象设计系统
·工作流管理系统 V1.1

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn