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



  结束传输

  当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:

  close(sockfd);

  你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。如你可以关闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。

  int shutdown(int sockfd,int how);

  Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式:
·0-------不允许继续接收数据
·1-------不允许继续发送数据
·2-------不允许继续发送和接收数据,
·均为允许则调用close ()

  shutdown在操作成功时返回0,在出现错误时返回-1并置相应errno。


  面向连接的Socket实例

  代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。

  该服务器软件代码如下:

#include  
#include
#include
#include
#include
#include
#include
#include
#define SERVPORT 3333 /*服务器监听端口号 */
#define BACKLOG 10 /* 最大同时连接请求数 */
main()
{
int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */
 struct sockaddr_in my_addr; /* 本机地址信息 */
 struct sockaddr_in remote_addr; /* 客户端地址信息 */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  perror("socket创建出错!"); exit(1);
}
my_addr.sin_family=AF_INET;
 my_addr.sin_port=htons(SERVPORT);
 my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
 if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) \
   == -1) {
perror("bind出错!");
exit(1);
}
 if (listen(sockfd, BACKLOG) == -1) {
perror("listen出错!");
exit(1);
}
while(1) {
  sin_size = sizeof(struct sockaddr_in);
  if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, \
  &sin_size)) == -1) {
perror("accept出错");
continue;
}
  printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
  if (!fork()) { /* 子进程代码段 */
   if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)
   perror("send出错!");
close(client_fd);
exit(0);
}
  close(client_fd);
  }
 }
}

  服务器的工作流程是这样的:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的socket上监听,当accpet接收到一个连接服务请求时,将生成一个新的socket。服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串"Hello,you are connected!"。最后关闭该socket。

  代码实例中的fork()函数生成一个子进程来处理数据传输部分,fork()语句对于子进程返回的值为0。所以包含fork函数的if语句是子进程代码部分,它与if语句后面的父进程代码部分是并发执行的。

上一页 [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