《Linux课程设计》 Linux 下聊天工具的设计与实现 课题: Linux 下网络聊天工具的设计与实现 姓名: 学号:22111440111 班级: 2014 级通信工程班 指导教师: 设计时间:2017.06.30 这个毕业论文整体采用在linux 平台下,在同一局域网内实现聊天功能。整 体框架主要分为服务端和客户端两个部分,设置好ip 和端口号,在Linux 下编译 和调试两主大块程序,实现服务端和各个客户端的连接,然后以服务端作为中继 转实现客户端之间的通信。由于服务端只有一个,而客户端可以有任意多个,所 以服务端采用了链表来管理多个客户端的信息,客户端的信息发送通过封装在结 构体中进行传输。本设计采用 TCP/IP 协议保证连接可靠,并在项目管理中采用 linux 流行的 gcc makefile编译,提高了编译和调试效率,加快了项目的完成 速度。由于要模拟多个客户端,所以在运行的环境中需要在PC 机上再克隆一个虚 拟系统来操作多个客户端。 本次设计的聊天工具采用字符串命令行的方式进行通信,主要实现了五个功 能:新用户的注册与登录,用户之间一对一的聊天,用户之间群聊,用户之间文 件加密传输,用户之间聊天记录保存。经过测试,程序运行可靠,能满足在linux 中实现网络聊天的要求。 关键词 linux,socket,gedit,服务端,客户端,网络编程 thesisgets sameLAN under Linuxplatform. overallframework twoparts: server client.Set up portnumber, compile debugtwo main bulk programs connectionbetween communicationbetween clients server.Since multipleclients, so serveradopts linkedlist managemultiple clients’ information, designadopts TCP/IPprotocol ensurereliable connection, Linuxgcc makefilecompiler projectmanagement, which improves debuggingefficiency, speedsup project’completion. Due multipleclients, so virtualsystem PCmachine operatemultiple clients runningenvironment. chattool designworks characterstring command line, which mainly accomplishes five functions: new users’ registration login,biunique chat between users, users’ group chat, file encryption transmissionbetween users, users’ chat record retention. After canmeet networkchat Linux.Keywords Linux, socket, gedit, server, client, network programming 1.1研究背景 1.1.1Linux 的介绍 1.1.2linux 的发展史 1.1.3socket 介绍 1.2研究意义 1.3国内外研究现状......................................................... 2.1功能需求 2.2性能需求 2.3模块划分 2.4模块调用关系........................................................... 2.5系统总流程图........................................................... 2.6文件信息安全........................................................... linux网络编程 3.1socket 概念及功能 3.2socket 类型 3.3socket 函数 103.3.1 API 功能介绍 103.3.2 套接口地址结构 103.3.3 基本转换函数 133.3.4 socket 编程流程 133.4 TCP/IP 协议 143.4.1 OSI 概述 143.4.2 TCP/IP 协议概述 153.4.3 TCP/IP 层次结构 183.4.4 TCP 通信 204.1 文件描述符描述........................................................ 20 4.2 文件操作函数.......................................................... 20 4.3 DES 加密算法 4.3.1密钥计算过程 214.3.2 初始置换ip 和逆初始置换ip 214.3.3 224.3.4 函数和S盒置换 224.4 linux 线程通信 234.5 链表 255.1 登录和注册实现........................................................ 25 5.1.1 注册实现 255.1.2 登录实现 255.2 私聊和群聊............................................................ 26 5.2.1 私聊 265.2.2 群聊 265.3 文件传输和DES 加密.................................................... 27 5.4 错误方案解决.......................................................... 30 316.1 编译操作 316.2 注册和登录运行效果图.................................................. 31 6.3 私聊和群聊效果图...................................................... 33 6.4 文件传输效果图........................................................ 34 6.5 文件内容加密效果图.................................................... 35 结束语 36参考文献..................................................................... 37 绪论随着Internet 的快速发展和普及,网络已经遍布世界各个角落。由于网路的 快速便捷,使得人们深深的爱上了它,因此网络在人们的交流中显得越来越重 要,使得人们的交流方式也变得越来越丰富。由于市场的需求和发展空间的很 大,各种通信软件迅速成长。比如现在的 QQ,MSN,微信,微博等网络聊天软件。 通过网络,人们可以迅速的了解各种有用信息,使人们足不出门就可以了解天下 大事。并且不管两个人离的有多远,都可以随时保持联系,因此拉近了人与人之 间的距离。更重要的是,当遇见一些自然灾害使得电话通讯不好使用时,这些网 络聊天工具就发挥了极大作用。这些软件功能都很完善,作为即将毕业的大学 生,可以模拟实现这些软件的部分功能,已达到自己对网络的理解和锻炼自己的 编程能力,因此本次毕业论文设计主要研究的就是在 linux 开发平台上模拟局域 网的网络聊天,使一个服务器与多个客户端之间建立链接并发送信息。这次毕业 设计能够使我更加熟悉linux 下编程操作,而更重要的是掌握socket 编程,熟悉 tcp 和udp 协议,掌握单链表的用法。 1.1 研究背景 1.1.1 Linux 的介绍 在本次设计中是在 linux 系统中完成的,所以首先需要了解 linux 系统的来 龙去脉。Linux Unix的基础上修改实现的,其主要的改变就是内核源码在网 上完全公开。所有人都可以把下载的内核源码拿来直接用或者任意的修改,并且 经修改过后的源码也必须是公开的。经过几年的发展,linux 已经有很大的改变, 所以现在 linux 有很多版本,但它们都遵循 Linux 最初的内核。Linux 系统的可移 植性很高而且投资相对于其它系统而言较低,所以各种类型的计算机硬件设备中 都选择安装linux 系统,特别是现在很热的嵌入式设备中。在现在的IT 行业中, Linux 就是一种表示内核,是大家普遍都认同的说法,因为 linux 是使用 GNU 程中各种工具和数据库的一种操作系统。Linux得名于计算机业余爱好者 Linus Torvalds。 Linux 支持各种各样的软件(包括大量免费软件),因此为用户提供了很大的 方便。Linux 在其创始人开发过后,就由世界上各种 精英爱好者共同开发,提出他们自己的看法并进行修改,作为一个操作系统,它具有 Unix、Mac、Windows WindowsNT同样的功能。从本质上讲,Linux Unix系统的克隆,在源码级上 兼容绝大部分的Unix 标准,它遵循POSIX 规范。 只要是使用 linux 就不得不提到 GNU,GNU 项目开始于 1984 年,旨在开发一 个类似 Unix、并且是自由软件的完整操作系统:GNU 系统。(GNU 是GNU Unix的递归缩写)。由于GNU 操作系统的核心是linux,所以GUN 的使用正在一步步变 大。Linux操作系统在早期开发和使用中有许多软件比如:gcc 编译程序、make 译管理程序、gas汇编程序、bash 命令解释程序等等。GNU linux是相互依存 的,没有 GNU linux 就是一个简单的框架,毫无使用之处,同时没有 linux GNU 也不会受到人们的欢迎。Linux 操作系统作为一个开源的操作系统被很多IT 同行 的人所认同,它能够吸引人最大的地方就是下载内核源码不需要成本。只要使用 遵循使用原则就可以任意使用并修改它的源代码。 1.1.2 linux 的发展史 Linux 的创始人,是一名叫Linus Torvalds 的芬兰大学生。他当时发现了Unix 系统的一些薄弱功能给他带来了很多的不便,于是他决定在 Unix 的基础上继续开 发出来有别于 Unix 系统的操作系统,该系统弥补了 Unix 系统的缺点,同时又添 加了新功能。通过他不懈的努力,在linux 内核中能实现一些基本的应用程序。 由于Linux 一开始就把Linux 的源代码放在网络上,引起了很多的爱好者的注意, 因此这些爱好者也加入到 linux 内核开发中,随着越来越多的高水平的爱好者加 入,该系统的发展迅速膨胀,很快各种版本的 linux 产生。由于大量的增添和修 改,使linux 的文件框架越来越大,越来越稳定,而且实现了基本的TCP/IP 功能, 使得linux 在Internet 中迅速成长。 经过二十多年的发展,现在Linux 系统已经以成熟的一面展现在人们面前。现 在的Linux 内核更加稳定和健全,而且获取内核源码更加的简单实用,所以现在的 商家抓住这些特点,开始大量普遍的运用 linux 系统。由于 linux 到目前为止几 乎没有被木马和病毒所困扰,所以也把它当作一种强壮而安全的防火墙。 刚开始linux 系统进入过后只是命令字符界面,还没有一个成型的桌面系统。 一个系统要受到人们的欢迎,必须要图形界面,并且图形界面要美观且操作简单。 所以桌面上的Linux 也在不断的完善之中。现在推行出来的ubuntu,centos 形界面都很受人们的喜爱,可以和微软的界面系统一比高下。由于 linux 系统内核小,兼容性好,效率高,稳定性强等特点,所以几乎在 各个行业都能看见 linux 的身影,比如:军事,金融,电信以及政府。当今计算 机领域比较巨型的服务器大多采用 LINUX 操作系统。可见 LINUX 在网络和分布式 系统的应用将是很有前景的。Linux 以后必将成为一种新的系统潮流。 1.1.3 socket 介绍 在网络中聊天以及发送信息等需求,几乎都要用到网络编程中的 socket,所 以有一切皆socket 一说。Linux 系统中有很多关于网络编程的函数库,因此linux 支持各种类型的套接字。接着就描述一下套接字,Socket 接口是TCP/IP 网络的一 个重要连接,在该操作系统内核中定义了Socket 接口和各种函数之间的调用关系, 通过这个接口我们可以实现许多网络上的应用程序。对于 Internet 网络编程,首先要理解Socket接口。该套接口是TCP/IP 协议中最常用的的接口。 Linux 中一切都是文件,所以套接字通信就是一种特殊的I/O,也就说明它是一种 文件描述符,所以对 socket 的操作就是对 socket 的读写实现。服务端和客户端 这两个进程要进行通信,需要socket 提供端点来实现它们之间的互相通信。套接 字也是一种面向 结构的思路,不同的套接字对应不同的服务端和客户端,服务端的套接字号是所有客户端都能识别的,任何客户端随机申请套接字都能与服 务端建立连接。常用的Socket 类型有两种:流式Socket (SOCK_STREAM)和数据 报式Socket(SOCK_DGRAM)。 1.2 研究意义 随着互联网技术的发展,互联网应用越来越丰富。人们的联系方式也变得越 来越多样化。譬如在 Internet QQ、MSN、微信、微博等网络聊天软件,方便了距离相离很远是人们之间进行交流。刚开始这些软件只是为了方便人们交流 而开发的一种娱乐方式,但是随着发展和市场的需求,这些工具的功能多样化使 得它们在市场上带来了很多的经济利益,因而使得聊天功能越来越强大。作为一 名即将毕业的大学生,可以通过这次的论文设计,巩固自己的 语言和数据结构知识,以及熟悉一个新系统 Linux Linux中的命令,socket 编程,网络协议, 高级网络编程等等,更重要的是锻炼了自己动手编程能力和面对问题怎样去分析 和解决的能力。 1.3 国内外研究现状 随着网络的发展,通信网络成为了我们现代社会发展的重要桥梁。最近几年” 云”一说法已经在人们的思想中成为一种定局,不管是有线还是无线,他们之间 的网络通信将是人们很关注的问题。由于网络通信的畅通,使得人们彼此之间的 通信变得快捷和方便。这是因为人类的需求,国内外出现了很多的聊天工具。比 如国内的QQ 和国外的MSN,以及最近很红火的微信和facebook。而对于QQ 而言, 它是以服务端作为中继并且接收客户端发来的信息,服务器总控制客户端,这样 客户端之间就可以采用不面向连接的方式进行通信,提高效率。当客户端之间没 办法连接时,才由服务器进行中转通信。在Internet 网络上使用 TCP/IP 协议进 行传输,要想客户端与客户端能进行正常的通信,他们彼此要和服务端先建立起 连接,然后通过与服务器的 TCP 连接进行中转通信。通过这两个具有代表性的聊 天工具,可以看出根据自身情况,国内和国外研究的方向是有一定区别的。由于 套接字的类型还是比较多,所以在不同的操作系统中必须要有相应的套接字函数 库。除此之外由于不同商家为了获利,生产出各种有竞争的产品,导致市场上出 现了不同型号的pc 机,并且运用了不同的操作系统,这样就对通信带来了很大的 麻烦,所以提出了tcp/ip 协议来解决这样的问题。 以前几乎所有的套接字都是运用在windows 系统下的,但是随着目前全球 Linux 系统开发的速度非常的快,使得 socket 套接字在 linux 系统中用的越来越 多,其中以美国为首的发达国家最为积极。由于linux 在中国是最近几年的新词, 所以中国的活跃程度相对还要低很多。尽管活跃度较低,但是linux socket通信在各行各业中迅速成长起来。