首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>其他编程>正文

Linux socket编程实例:echo服务器程序

http://www.oklinux.cn  2007-12-06  来源:  sixth  会员收藏  游客收藏  【 】 

本文编的是echo服务器示例程序,当收到客户端的数据,服务器把数据不经加工地发送给客户。采用TCP连接,采用端口8080进行设计,在整个过程中主要涉及socket的通信。

 

首先建立一个 socket,代码如下:

 

int socketfd;

 

socketfd = socket(AF_INET, SOCK_STREAM, 0);

 

socket函数是我们写socket程序遇到的第一个函数,它在指定的协议上创建一个socket,它的函数说明如下所示:

 

#include

 

int socket ( int AddressFamily, int Type, int Protocol)

 

其中:AddressFamily参数指定socket操作中所要解释的网络地址类型,值为如下之一:

 

AF_UNIX

表示操作系统文件路径

 

AF_INET

表示Internet网络地址

 

AF_NS

表示XEROX网络地址

Type参数表明了通信的语义,即通信连接的方式。参数为如下之一:

SOCK_STREAM

提供稳定可靠的连接,并且是双向的通信方式,如TCP。

SOCK_DGRAM

提供无连接的数据报通信,如UDP。

SOCK_RAW

提供该问内部网络协议和网络接口, 只有root用户才可以使用些协议。

 

返回值:成功则返socket描述符,出错则返回-1,可通过errno代码进行查看错误原因。

 

再次,把socket绑定到本机上,代码如下:

 

 

struct sockaddr_in sa;

bzero(&sa, sizeof(sa));

sa.sin_family = AF_INET;

sa.sin_port = htons(EHCO_PORT);

sa.sin_addr.s_addr = htons(INADDR_ANY);

bzero(&(sa.sin_zero), 8);

if(bind(socketfd, (struct sockaddr *)&sa, sizeof(sa))!= 0)

{

printf("bind failed ");

printf("errno=%d ", errno);

exit(1);

}

else

{

printf("bind successfully ");

}

 

上面的代码中,定义一个scokaddr_in 结构体变量sa,然后填机服务所要开通的端口号和地址。

 

sa.sin_family = AF_INET;

 

>表明地址类型

 

sa.sin_port = htons(EHCO_PORT);

 

>端口号为8080

 

sa.sin_addr.s_addr = htons(INADDR_ANY);

 

>表明绑定在本机

 

然后利用bind函数,把刚才已建立的socket作为参数,绑定起来。

 

绑定完成后,服务器要侦听客户端的连接,因此首先要完成侦听设置这一过程,由listen函数实现,代码如下:

 

 

if(listen(socketfd ,MAX_CLIENT_NUM) != 0)

...{

printf("listen error ");

exit(1);

}

else

...{

printf("listen successfully ");

}

 

 

listen(socketfd, MAX_CLIENT_NUM)表明在socketfd上侦听,其中客户个数最大值为MAX_CLIENT_NUM。

共4页: 上一页 1 [2] [3] [4] 下一页

上一篇:为Linux操作系统下的文件 分配多个权限   下一篇:Fedora Linux中给X250安装ATI 7.驱动


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·GNU/Linux应用程序编程:用管道进行编程
·uClinux系统上运行自已编写的Hello程序
·Linux系统下设置环境变量三法
·Linux系统下设置环境变量Path的方法
·Ubuntu 7.0 Linux建立C与GTK的开发环境
·如何在Ubuntu 7.0上实现C/C++开发环境
·实例解析:编写简单的Linux服务控制脚本
·在Ubuntu下建立PowerPC405EP的开发环境
·Linux系统中BSD套接口开发基础介绍
·Linux Kernel 2.6.25-rc1已经释出了
·Ubuntu 下安装配置 D 语言编译器 DMD
·Linux Shell元字符知识笔记
·基于PS3和Cell处理器并行程序编译过程
·使用PS3与Linux搭建一个并行程序开发平台
·Linux下安装Python
·Linux操作系统下给Windows发送PopUp消息方法
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux内核学习记
·Linux编程时获取当前时间实例解析
·Linux操作系统下java中文无法显示问题
·Linux系统中限制用户进程CPU及内存占用
·Linux内核引导参数详解
·Linux环境下Wine的中文显示以及freetyp
·新手学堂 Linux的sort命令使用
·Linux 2.6内核中sysfs文件系统简述
·Linux程序开发的一些基础概念
·把Linux9.0的内核升级为2.6.18
·在Linux操作系统下远程部署Java应用程
·Linux开机流程详解
  阅读排行
·开源空间 网络安全工具开发函数库Libne
·Linux程序设计入门 系统进程的详细介绍
·GNU/Linux应用程序编程:用管道进行编
·如何在Ubuntu 7.0上实现C/C++开发环境
·JSP应用语法详解大全 (1)
·Linux系统中BSD套接口开发基础介绍
·JSP应用语法详解大全 (2)
·JSP开发入门
·浅析JSP开发中的对象和范围属性
·在Linux操作系统下共享库编程的方法介
·JSP应用语法详解大全 (3)
·基于Eclipse的红帽开发者工作站beta版
·Linux系统安装Monodevelop开发工具
·JSP单页面网站文件管理器
·基于JSP技术的网络教学平台设计
网摘收藏: