基于linux的socket网络编程的性能优化

基于linux的socket网络编程的性能优化

ID:9008599

大小:457.50 KB

页数:5页

时间:2018-04-14

基于linux的socket网络编程的性能优化_第1页
基于linux的socket网络编程的性能优化_第2页
基于linux的socket网络编程的性能优化_第3页
基于linux的socket网络编程的性能优化_第4页
基于linux的socket网络编程的性能优化_第5页
资源描述:

《基于linux的socket网络编程的性能优化》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、基于Linux的Socket网络编程的性能优化时间:2009-10-2009:53:33来源:国外电子元器件作者:王雷,王子淘太原理工大学1引言   随着Intenet的日益发展和普及,网络在嵌入式系统中应用非常广泛,越来越多的嵌入式设备采用Linux操作系统。Linux是一个源代码公开的免费操作系统,具有强移植性,所以对基于Linux的Socket网络编程的研究越来越重要。   Socket实际是网络传输层供给应用层的编程接口。传输层则在网络层的基础上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主机的某一进程通信。Socke

2、t就是应用层与传输层之间的桥梁。如图2所示。   使用Socket编程时可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过Internet在全球范围内进行通信。编写并运行Socket的客户端和服务器端程序,双方通过套接字建立了服务连接请求,并且通过一些方法提高Socket的性能。3Socket编程3.1Socket类型   常见的Socket有3种类型:   (1)流式Socket(SOCK_STREAM)它提供可靠的通信流,使用面向连接的TCP协议,从而保证数据传输的正确性和顺序性:   (2)数据报Socket(SOC

3、K_DGRAM)数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它定义一种面向无连接的服务,使用数据报协议UDP;   (3)原始Socket(SOCK_RAM)它允许直接访问底层协议,功能强大但使用较为不便,主要用于一些协议的开发。本编写的Socket属于流式Socket。3.2Socket编程流程   Socket编程采用客户/服务器模式。因此编程分为服务器端和客户端两部分。   每一个Socket都用一个半相关描述(协议,本地地址,本地端口)来表示,Socket也有一个类似于文件打开的函数,该函数返回一个整型的Socke

4、t描述符,随后建立连接,数据传输等操作都通过Socket来实现。   编程流程如下:服务器端首先建立Socket,返回该Socket的描述符:配置Socket的端口和IP地址;建立监听甬数,检测是否有客户端向服务器发送请求,若有则接收该请求,将其放到接收队列中:从接收队列中接受一个请求;并向客户端发送确认连接信息。   客户端建立一个Socket,返回该Socket的描述符;配置Socket端口和IP地址;向服务器发送连接请求,并接收服务器发回的确认连接信息。双方通信结束后,关闭其Socket。进行Socket编程的基本函数有socket(),

5、bind(),listen(),accept(),connect(),send(),recv(),close()。图3为Socket的编程流程图。3.3程序的编译和运行结果   (1)在Linux的VI编辑器下编写服务器端程序serv.c和客户端程序clt.c。运用交叉编译工具arm-linux-gcc,执行编译指令生成可执行文件。   其指令为:   #gccserv.c=0serv   #gccclt.c-0clt   编译没有错误则会生成可执行文件serv和clt。   (2)配置服务器和客户端的IP,保证网络畅通,在serv.c中已将服

6、务器的IP设置为:192.168.2.111。在客户端的“网络设置”中设置IP为:192.168.2.22,可以通过ping命令检测网络是否畅通。   (3)在一台计算机的终端先运行服务器程序(./serv),再在客户端的计算机终端上运行客户端程序(./clt192.:168.2.1l1)就会看到结果(Hello,WangLei!Youareconnected!);运行结果如图4和图5所示。如果未运行服务器程序而先运行客户端程序将立即提示“Connect:Connectionrefused”。4SOCket的性能优化4.1解决多路复用   上面

7、的运行过程仅实现了一个客户端接人,在实际情况中,人们往往遇到多个客户端连接服务器端的情况。由于connect(),recv(),send()都是阻塞性函数,若资源没有准备好,则调用该甬数的进程将进入睡眠状态,无法处理I/O多路复用。在服务器端的serv.c中加入select()函数,它可同时监听多个套接字,实现I/O的多路复用。   其函数原型如下:     该函数监视一系列文件描述符,特别是readfds、writefds和exceptfds。如果想知道是否能从标准输入和套接字描述符sockfd读入数据,只要将文件描述符“0”和“sockfd

8、”加入集合readfds中。参数numfds应等于最高文件描述符的值加1,设置该值为sockfd+1。因为它一定大于标准输入的文件描述符“0”。当函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。