网站大量收购独家精品文档,联系QQ:2885784924

Linux下基于socket网络通信的实现.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux下基于socket网络通信的实现 报告人:李 敏 导 师:郭业才 教授 院 系:安徽理工大学电气与信息工程学院 主要内容 Linux系统网络模块结构 基于Socket的网络通信原理 Socket网络通信的编程 嵌入式下Socket通信的实现 1. Linux系统网络模块结构 近年来,随着电子和网络技术的发展,以及嵌入式技术在高端产品中的应用,在嵌入式产品中实现网络通信已成为嵌入式领域的必然需求。 Linux操作系统具有良好的稳定性和出色的网络性能,因此被广泛应用于网络服务领域。在linux下开发高性能的网络通信程序,是充分发挥Linux网络特性的一个关键因素。 为适应嵌人式网络应用的需求,嵌人式系统要求配备标准的一种或多种网络通信接口,需要TCP/IP协议簇软件支持。 TCP/IP是一个协议系统,是一组支持网络通信的协议集合,TCP/IP协议参考模型分为4层:网络接口层、互联网层、传输层和应用层。 套接字(socket)是介于网络应用层和传输层之间的编程接口,是TCP /IP网络最为通用的API,它在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有socket接口的计算机通信。 socket在Linux网络层次模型中的位置如图1所示。 TCP/IP中的socket有三种: 1) 数据流式socket(SOCK-STREAM): 流式套接字提供可靠的、面向连接的通信流,它使用TCP协议,保证了数据传输的正确性和顺序性。 2) 数据报式socket(SOCK-DGRAM): 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。它使用数据报协议UDP。 3) 原始socket: 原始套接字允许对底层协议如IP或ICMP直接访问,它功能强大但使用较为不便,主要用于一些协议的开发,需要有超级用户权限。 2. 基于Socket的通信原理 一般在设计网络程序时,会分为服务器端与客户端两部分,而一个网络程序本身就具有Client/Server结构,下面以说明TCP网络程序的流程为例,分为 Server 端及 Client端进行介绍。 TCP 程序设计流程如图2所示。 服务器首先启动,通过调用函数socket(),建立一个socket,然后调用bind()将该socket和本地网络地址绑定在一起,再调用listen()使socket做好侦听的准备,并规定它的请求队列的长度,之后调用accept()来接收连接。 客户端在建立socket后,就可调用connect()和服务器建立连接。连接建立后,客户机和服务器之间就可以通过调用send()和recv()来发送和接收数据。最后,数据传送结束后,双方调用close()关闭socket。 3. Socket通信的编程 分别编写服务器端应用程序server.c 与客户端应用程序client.c,其功能为: 客户端将数据发送给服务器,服务器接收数据后进行解析,并将解析的结果回传给客户端,客户端收到回传信息后,将信息显示在显示器上。程序实现的流程图如图3、图4所示。 在PC机上使用gcc编译server.c生成在PC机上运行的程序server,使用arm-linux-gcc交叉编译client.c生成在实验箱上运行的程序client。 #gcc –o server server.c #arm-linux-gcc –o client client.c 下面主要给出服务器端程序secrver.c ,客户端程序client.c与之类似。在主程序中初始化变量后即可进行应用部分的编程了: /* server.c */ ……………/*包含头文件,定义端口号 */ int main (void) { ………………/*定义、初始化变量 */ /*建立socket,第二个参数说明使用流式socket */ mysock=socket (AF_INET,SOCK_STREAM,0); if (mysock == -1){ perror(call to socket); exit(1); } /* 填充Ipv4地址 */ bzero (sin,sizeof(sin)); sin.sin_family=AF_INET; sin.sin_addr.s

文档评论(0)

wxc6688 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档