欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    关于Linux网络编程课程设计文档格式.docx

    • 资源ID:982048       资源大小:158.81KB        全文页数:34页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    关于Linux网络编程课程设计文档格式.docx

    1、摘要本课程设计实现了在 linux 下简单的网络聊天室。在 Linux 下编写并调试服务器端程序和客户端程序,实现了客户、服务器之间的连接和通信。可以在单机上开辟两个窗口分别运行客户、服务器端的程序,或者将两台主机连接分别作为客户和服务器的方式。本设计使用网络套接字 socket 和多线程在网络中的应用,并基于 linux 下的 vi 编辑器。本方案经 gcc 调试器调试成功,可以在单机网络聊天中使用。关键词: linux ;socket ;vi一、背景1.1 开发背景1.2 linux 介绍二、实验目的三、实验步骤3.1 交叉编译平台的安装四、设计原理4.1 设计原理流程4.2 程序流程分析

    2、五、网络套接字(socket)的概念5.1 Socket 介绍5.2 Socket 原理简介5.3 Socket 通信过程与程序开发六、系统实现6.1 Linux 提供的有关 Socket 的系统调用6.2 监听连接6.3 发送请求6.4 主机接收请求,进行数据通信七、 运行效果一、背景1.1 开发背景在网络无所不在的今天,在 Internet 上,有 ICQ、MSN、Gtalk、OICQ 等网络聊天软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息, 不管对方是否也同时在线,只要知道他有号码。

    3、Linux 操作系统作为一个开源的操作系统被越来越多的人所应用,它的好处在于操作系统源代码的公开化!只要是基于 GNU 公约的软件你都可以任意使用并修改它的源代码。但对很多习惯于 Windows 操作系统的人来说,Linux 的操作不够人性化、交互界面不够美观,这给 Linux 操作系统的普及带来了很大的阻碍。因此制作一个 Linux 操作系统下的拥有人性化界面的实时通讯工具,将给那些刚刚接触 Linux 操作系统的用户带来极大的方便,而且通过设计这样的一个应用程序还能更好的学习网络编程知识和掌握 LINUX 平台上应用程序设计开发的过程,将大学四年所学知识综合运用,以达到检验学习成果的目的。

    4、1.2 linux 介绍Linux 是一种针对 PC 计算机和工作站的操作系统,它具有像 Windows 和 Mac 那样的功能齐全的图形用户界面(GUI,Graphical User Interface)。Linus Torvald 和其它的遍布世界各地的编程人员共同开发的。作为一种操作系统,它具有与 Unix,Mac,Windows 和 WindowsNT 同样的功能。提到 Linux 我们不能不提 GNU 和 Unix。Richard M.Stallman 建立的自由软件联盟出 版了两种许可证,GNU 通用公共许可证(GNU Gneral Public License,GPL)和 GNU

    5、 函数库通 用公共许可证(GNU Library Gneral Public License,LGPL)。大部分 GNU 工程的软件和文档 是以 GNU 通用公共许可证发行的,但是有一些库是以 GNU 函数库通用公共许可证发行的。按照 GNU 通用公共许可证的规定,Linux 的源代码可以自由获取,这满足了我们学习该系统的强烈愿望。GPL 充分体现了 Stallman 的思想:只要用户所做的修改是同等自由的,用户 可以自由地使用、拷贝、查询、重用、修改甚至发布这个软件。通过这种方式,GPL 保证了 Linux(以及同一许可证下的大量其他软件)不仅现在自由可用,而且皮后经过任何修改这后都仍然可以

    6、自由使用。Unix 是由 ATT 贝尔实验室的 Ken Thompson 和 Dennis Ritchie 于 1969 年在一台已经废弃了的 PDP-7 上开发的;最初它是一个用汇编语言写成的单用户操作系统。后来,他们又在 PDP-11 上用 C 语言重新编写(发明 C 语言的部分目的就在于此),把 Unix 做成为了一个文本处理系统,这使 Unix 在贝尔实验室得到广泛的应用。Unix 的最初版本免费提供给许多知名的大学的计算机系使用。加州大学伯克利分校的计算机系就是其中的一名, 并地 Unix 进行了修改增加了许多新的特点,这就是主为人知的 BSC 版本的 Unix。与此同时,其它独立开

    7、发的 Unix 版本也开始萌生。Unix 不断发展了,各种版本被应用到不同的计算机使用。而 Linux 最初是专门为基于 Intel 的个人计算机设计的。(1) Linux 的昨天1991 年,一名叫 Linus Torvalds 的芬兰大学生对 Unix 各种版本对于 80386 类的机器的脆弱支持十分不满。他决定要开发出一个全功能的、支持 POSIX 标准的、类 Unix 的操作系统内核,该系统吸收了 BSD 和 System V 的优点,同进摒弃了它们的缺点。他独立把这个内核开发到 0.02 版,这个版本已经可以运行 gcc、bash 和很少的一些应用程序。后来,他又开始了在因特网上寻求

    8、广泛的帮助。1994 年,Linux 已经升级到 1.0 版本。它的源代码量也呈指数形式增长,实现了基本的 TCP/IP 功能,此时 Linux 已经拥有大约 10 万的用户。(2) Linux 的今天作为一各服务器级的操作系统,Linux 已经成熟了。现在的 Linux 内核由 150 多行代码组成,能作为 Web 服务器平台,也为越来越多的商业用户提供文件和打印服务。它既被当作邮件服务器的一种候选平台,也被当作一种强壮而安全的防火墙。Linux 的企业级特性,比如支持多处理器、支持大型文件系统、日志文件系统以及密集型计算和高可用性集群技术,也逐步成熟。桌面上的 Linux 也在继续完善。K

    9、DE 桌面提供的图形用户界面在易用性和可配置方面都能和微软的 Windows 相媲美。(3) Linux 的明天Linux 最强大的生命力在于其公开的开发过程。每个人都有可以自由获取内核源程序,每个人都有要不得以运载源程序加以修改,而后他人也可以自由获取你修改后的源程序。Linux 这种独特的自由流畅的开发模型已被命名为 bazaar(集市模型)。Bazaar 开发模型通过重视实验,征集并充分利用早期的反馈,对巨大数量的脑力资源进行平衡配置, 可以开发出更优秀的软件。本联盟就是想通过 bazaar 开发模型,在网上召集一些 Linux 的爱好者,开发出更优秀的操作系统或软件。二、实验目的2.1

    10、 掌握 ARM Linux 交叉编译平台的搭建2.2 掌握 Makefile 文件的编写2.3 掌握编译工具 arm-linux-gcc2.4 熟悉程序下载过程三、实验步骤3.1 交叉编译平台的安装(1) 考虑到现今 Linux 平台发展,交叉编译平台编统一为 arm-linux-gcc-4.4.3(2) 在 windows 系统下,建立一个共享目录,如:e:/linux_file(3) 将光盘目录linux中的arm-linux-gcc-4.4.3.tar.gz 复制到e:(4) 注意在进行虚拟机设置时使共享目录的有效,并添加共享目录e:(5) 进入linux操作系统,root目录下建立一个

    11、Armcode的子目录,将共享目录下的文件arm-linux-gcc-4.4.3.tar.gz复制到该目录(6) 然后进入到该目录,执行解压命令:#cd /root/Armcode;#tar xvzf arm-linux-gcc-4.4.3.tgz C /; 注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。(7) 执行该命令,将把arm-linux-gcc 安装到/opt/FriendlyARM/toolschain /4.4.3/bin目录。(8) 把编译器路径加入系统环境变量,运行命令: #gedit /root/.bashrc编辑

    12、/root/.bashrc 文件,在最后一行添加:export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin(9) 重新登录系统(不必重启机器,开始-logout 即可),使以上设置生效,在命令行输入:arm-linux-gccv,会出现如下信息,这说明交叉编译环境已经成功安装。四、设计原理4.1 设计原理流程网络编程,一定离不开套接口;那什么是套接口呢?在 Linux 下,所有的 I/O 操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,还包括一个网络连接、一个命名管道

    13、、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。服务器端:(1) 创建一个 socket,用函数 socket();(2) 绑定 IP 地址、端口等信息岛 socket 上,用函数 bind();(3) 设置应许的最大连接数,用函数 listen();(4) 接收客户端上来的链接,用函数 accept();(5) 接收数据,用 recv();(6) 关闭网络链接。客户端:(2) 设置要连接的对方的 IP 地址和端口等属性;(3) 连接服务器,用函数 connect();(4) 发送数据,用函数 send();(5) 关闭网络连接。4.2 程序流程分析(1)创建 Socket不管是

    14、客户端还是服务器端,都需要先创建一个 socket。调用方式为: int socket(int domain,int type,int protocol)功能:创建一个新的套接字。参数:domain: 指明所使用的协议族type:指明套接字的类型protocol: 通常赋值“0”返回值:成功时,返回一个整形 socket 描述符;失败时,返回-1。设计过程具体调用为:sock_fd = socket(AF_INET,SOCK_STREAM,0);(2)服务器端使用的函数1) int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

    15、sockfd:是由 socket 调用返回的文件描述符。Addrlen:是 sockaddr 结构的长度。my_addr:是一个指向 sockaddr 的指针。由于我们主要使用 Internet 所以 sin_family 一般为 AF_INET,sin_addr 设置为INADDR_ANY 表示可以和任何的主机通信,sin_port 是要监听的端口号,sin_zero8是用来填充的。bind 将本地的端口同 socket 返回的文件描述符捆绑在一起,成功是返回 0。2) int listen(int sockfd,int backlog) sockfd:是 bind 后的文件描述符。back

    16、log:设置请求排队的最大长度,当有多个客户端程序和服务端相连时,使用这个表示可以介绍的排队长度。listen 函数将 bind 的文件描述符变为监听套接字,返回的情况和 bind 一样。3) int accept(int sockfd, struct sockaddr *addr,int *addrlen) sockfd:是 listen 后的文件描述符。addr,addrlen:是用来给客户端的程序填写的,服务器端只要传递指针就可以了。bind、listen 和 accept 是服务器端用的函数,accept 调用时服务器端的程序会一直阻塞到有一个客户程序发出了连接。accept 成功时返

    17、回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了,失败时返回-1。4) int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)sockfd:socket 返回的文件描述符。serv_addr:储存了服务器端的连接信息,in_add 是服务端的地址。addrlen:serv_addr 的长度。connect 函数是客户端用来同服务端连接的,成功时返回0,sockfd 是同服务端通讯的文件描述符,失败时返回-1。(3)客户端使用的函数1)connect( SOCKET s, const struct so

    18、ckaddr FAR* name, int namelen); s:标识一个未连接套接口的描述字。 name:欲进行连接的端口名。namelen:名字长度。若无错误发生,则 connect()返回非 0。否则的话,返回 SOCKET_ERROR 错误,应用程序可通过 WSAGetLastError()获取相应错误代码。对阻塞套接口而言,若返回值为SOCKET_ERROR 则应用程序调用 WSAGetLsatError()。如果它指出错误代码为WSAEWOULDBLOCK,则您的应用程序可以:a用 select(),通过检查套接口是否可写,来确定连接请求是否完成。b如果您的应用程序使用基于消息的

    19、 WSAAsynSelect()来表示对连接事件的兴趣,则当连接操作完成后,您会收到一个 FD_CONNECT 消息。2)send( SOCKET s, const char FAR* buf, int len, int flags);一个用于标识已连接套接口的描述字。 buf:包含待发送数据的缓冲区。 len:缓冲区中数据的长度。flags:调用执行方式。五、网络套接字(socket)的概念5.1 Socket 介 绍上世纪中后期, 在美国国防部高研署(DARPA)将 TCP /IP 的软件提供给加利尼亚大学 Berkeley 分校后, TCP /IP 很快被集成到 Unix 中, 同时出现

    20、了许多成熟的 TCP /IP 应用程序接口(API) 。这个 API 称为 Socket 接口( 套接口) 。Socket 在计算机中提供了一个通信端口, 可以通过这个端口与任何一个具有 Socket 接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Socket 接口来实现。在应用开发中就像使用文件句柄一样, 可以对 Socket 句柄进行读、写操作。今天, Socket 接口是 TCP /IP 网络最为通用的 API,也是在 Internet 上进行应用开发最为通用的 API。Linux 操作系统具有良好的稳定性和出色的网络性能,因此被广泛应用于网络服务领域。而在 Linux

    21、下开发高性能的网络通信程序,是充分发挥 Linux 网络特性的一个关键因素。5.2 Socket 原理简介当用电话与他人通信时, 必须拿起话筒, 拨叫对方的电话号码, 然后等待对方的应答; 当双方进行通话的时候, 就建立了一个具有两个端点的通信线路,这两个端点是:本地的电话号码( 在本地位置) ;对方的电话号码( 在对方的位置处) 。双方的通信与通信的两个端点和他们之间的通信线路有关。Linux 中的套接口与电话非常相似。套接口代表通信线路中的端点, 两端点之间就是数据通信网络。套接口与电话的相似性还表现在另一方面。当给某人打电话时, 拨叫的是对方用户的电话号码。而套接口中的网络地址就相当于电

    22、话号码。通过在程序中指定远程套接口的地址, 就可以建立从本地套接口到远端套接口的通信。TCP /IP 是计算机互连最常使用的网络通讯协议, TCP /IP 的核心部分由网络操作系统的内核实现,应用程序通过编程接口来访问 TCP /IP。套接字(Socket) 是介于网络应用层和传输层之间的编程接口, 套接字接口提供了访问下层通信协议的大量系统调用和相应的数据结构。在 Linux 中, 套接字接口是应用程序访问下层的网络协议的惟一方法。具体讲,套接字在用户级实现了两个应用程序之间的网络连接和数据交换, 所以 Linux 中的套接字意味着网络上的连接。套接字在 TCP /IP 网络模型中的地位如图

    23、 4 所示。图 4 socket 在 TCP/IP 网络模型中的示意图Socket 分为以下三种类型:流式套接字( Stream Socket) : 是最常用的套接字类型, 文件传送协议( FTP) 即使用流式套接字。提供一个面向连接、可靠的数据传输服务, 数据无差错、无重复地发送, 且按发送顺序接收。内设流量控制, 避免数据流超限; 数据被看作是字节流, 无长度限制。数据报套接字(Datagram Socket) : TCP /IP 协议族中的 UDP 协议使用此类接口, 它是无连接的服务,数据通过相互独立的报文进行传输, 提供了一个无连接服务。数据包以独立包形式被发送, 不提供无错保证,

    24、数据可能丢失或重复, 并且接收顺序混乱。原始数据报套接字(Raw Socket) : 该接口允许对较低层协议, 如 IP、ICMP 直接访问。常用于检验新的协议实现或访问。5.3 Socket 通信过程与程序开发(1) Socket 通信过程基于 TCP 可靠连接的客户与服务器连接进程流程图如图客户与服务器的socket连接步骤流程Socket 工作过程如下: 服务器首先启动, 通过调用 Socket (), 建立一个 Socket, 然后调用 bind()将该 Socket 和本地网络地址绑系在一起, 再调用 listen()使 Socket 做好侦听的准备, 并规定它的请求队列的长度,之后

    25、就调用 accept()来接收连接。客户在建立 Socket 后就可调用 connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用 send()和 recv()来发送和接收数据。最后, 待数据传送结束后, 双方调用 close()关闭Socket。(2) Socket 通信程序开发下面详细说明 Socket 通信程序的开发过程:1) 步骤 1: 建立套接口 socket()int sockfd = socket ( int domain, int type, intprotocol) , 其中 domain 参数指定socket 协议族, 包括 PF_LOACL 和

    26、PF_INET, PF_LOACL 表示使用本地套接口, PF_INET 表示使用 Internet 套接口。Type 参数定义了套接口的类型, 包括 SOCK_STREAM 和SOCK_DGRAM, SOCK_STREAM 指定为流套接口,SOCK_DGRAM 指定为数据报套接口。protocol 通常赋值“0”, 意味套接口使用 TCP /IP 协议。socket()调用返回一个整型socket 描述符, 可以在后面的调用使用它, 当其值为- 1 时, 说明有错误发生。2) 步骤 2: 绑定套接口 bind()当用 socket()建立套接口后, 该套接口还是处于无名状态的, 无名套接口就

    27、象没有号码的电话一样,别人无法向发送信息( 在同一 linux 内核下可实现无名状态下通信) 。为了像电话分配电话号码一样, 可以通过 bind()为建立的套接口绑定一个名字分配地址。这一步对客户端不是必需的。int bind ( int sockfd, struct sockaddr _my_addr,int addrlen) ;sockfd 是一个 socket 描述符, my_addr 是一个指图计算机应用向包含有本机 IP 地址及端口号等信息的 sockaddr 类型的指针; addrlen 常被设置为 sizeof ( structockaddr) , 如果函数调用成功, 就返回 0

    28、, 否则就返回为- 1, 我们可以通过查看 errno 的值来了解错误的原因。需要指出的是, 可以用下面的赋值实现自动获得本机 IP 地址和随机获取一个没有被占用的端口号:my_addr.sin_port=0; / 系统随机选择一个未被使用的端口号 /my_addr.sin_addr.s_addr=INADDR_ANY; 填入本机 IP 地址 /通过将my_addr.sin_port 置为 0, 函数会自动为选择一个未占用的端口来使用。同样, 通过将my_addr.sin_addr.s_addr 置为 INADDR_ANY, 系统会自动填入本机 IP 地址。bind()函数在成功被调用时返回

    29、0; 遇到错误时返回“- 1”并将 errno 置为相应的错误号。另外要注意的是, 当调用函数时, 一般不要将端口号置为小于 1024 的值, 因为 11024 是保留端口号, 可以使用大于 1024 中任何一个没有被占用的端口号。( 3) 步骤 3: 请求连接connect()当客户端绑定地址后, 发送请求连接信号 connect()来与远端服务器建立一个 TCP连接。connect()函数原型为:int connect ( int sockfd, struct sockaddrserv_addr, int addrlen);sockfd 是目的服务器的 socket 描述符; serv_addr 是包含目的机 IP 地址和端口号的指针,addrlen 为结构的大小。遇到错误时返回- 1, 并且 errno 中包含相应的错误码。进行客户端程序设计无须调用 bind(), 因为这种情况下只需知道目的机器的 IP 地址, 而客户通过哪个端口与服务器建立连接并不需要关心, 内核会自动选择一个未被占用的端口供客户端来使用。( 4) 步骤 4: 监听连接 listen()在服务器端程序中, 当 socket


    注意事项

    本文(关于Linux网络编程课程设计文档格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开