新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM-Linux嵌入式系统的多进程并发服务器设计

基于ARM-Linux嵌入式系统的多进程并发服务器设计

作者: 时间:2016-09-12 来源:网络 收藏

bind (listen_fd,(struct sockaddr*)client_addr,sizeof(client_addr))

当调用socket0函数创建一个套接字时,默认情况下它是一个主动套接字。所以对于TCP服务器,在绑定操作后,必须要调用listen0函数,将这个未连接的套接字转换。

成被动套接字,使它处在监听模式下,指示内核应接受发向该套接字的连接请求。在调用listen0函数后,服务器的状态从close转换到listen状态。Listen第二个状态字代表的是最大连接数,本系统设置的最大连接数为10。

listen(listen_fd,10);

接受客户连接,客户协议地址和长度省略接收,失败accept_fd=-1,置errno。如果建立连接。并且fork0=0,那么程序就进入子进程进行执行。

accept_fd=accept(listen_fd,NULL,NULL);

清除一个文件描述符集,并将一个新文件描述符加入文件描述符集中,其作用就是更新文件描述符。

FD_ZERO(fds);

FD_SET(aecept_fd,fds);

函数select0是给出每个描述符我们所关心的条件:是否读描述符、是否想写描述符、是否描述符的异常条件。tv指等待时间。FD_ISS ET()测试该集中的一个给定位是否有变化、更新。

retval=select(accept_fd+1,fds,NULL,NULL,tv);

FD_ISSET(accept_fd,fds)

调用read0可以接收buffer数据缓冲区,1 024指接收数据缓冲区大小,n为接收字节数。

n=read(aecept_fd,buffer,1 024);

调用子程序modbus.c,执行相应操作,调用make_modbus_ack0生成回发数据,并通过send0回发给客户端。

send_count=make_modbus_ack(buffer,n);

send(accept_fd,buffer,send_count,0)

3 ARM-Linux多进程服务移植与实现

3.1 程序编译移植

Makefile的作用就是让编译器知道要编译一个文件需要依赖哪些文件,同时当那些依赖文件更新时,编译器会自动发现最终生成的文件已经过时,而重新编译相应模块。Makefile定义了一系列规则来指定各文件,如依赖性、先后顺序及是否需要更新等。

ARM平台上的Makefile

CROSS=arm-linux-

arm-modbus-server.main.c modbus.c

$(CROSS)gcc-o arm-modbus-server main.c modbus.c

clean:

rm-vf*.o

编译译基于ARM的modbus网络程序如下图,首先我们看到文件夹里没有可执行文件arm-modbus-server,输入:#make

执行Makefile文件,进行编译连接依赖文件:main.c、modbus.c、std_c.h。

然后生成我们所需要的文件arm-modbus-server。

3.2 并发服务器测试

本测试是基于ARM9的linux2.9内核平台。首先使用chmod修改arm-modbus-server执行权限,然后运行./arm-modbus-server即服务器程序已经启动。

启用两个客户端通过IP访问服务器,可见如图5所示,已显示并发服务器运行正常。

基于ARM-Linux嵌入式系统的多进程并发服务器设计

4 结论

本文详细介绍了并发服务器的原理结构,分析了基于linux下的并发服务器程序代码,并且移植到ARM平台上运行,实现了小型嵌入式服务器的制作。这种低成本、低噪声、低功耗、高稳定性、高安全性的嵌入式服务器,将在我们信息化发展中的智能楼宇、智能家电、智能移动设备中获得应用。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭