文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | 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日 作者: 查看:[大字体 中字体 小字体]


  #include
  #include
  ……
sockfd = socket(AF_INET,SOCK_STREAM,0);
fcntl(sockfd,F_SETFL,O_NONBLOCK);
……

  通过设置socket为非阻塞方式,可以实现"轮询"若干Socket。当企图从一个没有数据等待处理的非阻塞Socket读入数据时,函数将立即返回,返回值为-1,并置errno值为EWOULDBLOCK。但是这种"轮询"会使CPU处于忙等待方式,从而降低性能,浪费系统资源。而调用select()会有效地解决这个问题,它允许你把进程本身挂起来,而同时使系统内核监听所要求的一组文件描述符的任何活动,只要确认在任何被监控的文件描述符上出现活动,select()调用将返回指示该文件描述符已准备好的信息,从而实现了为进程选出随机的变化,而不必由进程本身对输入进行测试而浪费CPU开销。Select函数原型为:
int select(int numfds,fd_set *readfds,fd_set *writefds,
fd_set *exceptfds,struct timeval *timeout);

  其中readfds、writefds、exceptfds分别是被select()监视的读、写和异常处理的文件描述符集合。如果你希望确定是否可以从标准输入和某个socket描述符读取数据,你只需要将标准输入的文件描述符0和相应的sockdtfd加入到readfds集合中;numfds的值是需要检查的号码最高的文件描述符加1,这个例子中numfds的值应为sockfd+1;当select返回时,readfds将被修改,指示某个文件描述符已经准备被读取,你可以通过FD_ISSSET()来测试。为了实现fd_set中对应的文件描述符的设置、复位和测试,它提供了一组宏:
  FD_ZERO(fd_set *set)----清除一个文件描述符集;
  FD_SET(int fd,fd_set *set)----将一个文件描述符加入文件描述符集中;
  FD_CLR(int fd,fd_set *set)----将一个文件描述符从文件描述符集中清除;
  FD_ISSET(int fd,fd_set *set)----试判断是否文件描述符被置位。
  Timeout参数是一个指向struct timeval类型的指针,它可以使select()在等待timeout长时间后没有文件描述符准备好即返回。struct timeval数据结构为:
  struct timeval {
   int tv_sec; /* seconds */
   int tv_usec; /* microseconds */ };

  POP3客户端实例

  下面的代码实例基于POP3的客户协议,与邮件服务器连接并取回指定用户帐号的邮件。与邮件服务器交互的命令存储在字符串数组POPMessage中,程序通过一个do-while循环依次发送这些命令。

#include 
#include
#include
#include
#include
#include
#include
#include
#define POP3SERVPORT 110
#define MAXDATASIZE 4096

main(int argc, char *argv[]){
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
char *POPMessage[]={
"USER userid\r\n",
"PASS password\r\n",
"STAT\r\n",
"LIST\r\n",
"RETR 1\r\n",
"DELE 1\r\n",
"QUIT\r\n",
NULL
};
int iLength;
int iMsg=0;
int iEnd=0;
char buf[MAXDATASIZE];

if((host=gethostbyname("your.server"))==NULL) {
perror("gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(POP3SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){

上一页 [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.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot