tcpip通信应用软件课程设计——网络聊天室的设计._第1页
tcpip通信应用软件课程设计——网络聊天室的设计._第2页
tcpip通信应用软件课程设计——网络聊天室的设计._第3页
tcpip通信应用软件课程设计——网络聊天室的设计._第4页
tcpip通信应用软件课程设计——网络聊天室的设计._第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于 Linux 网络聊天室的设计 1 共 18 页 南京工程学院 通信工程学院 课程设计说明书课程设计说明书( (论文论文) ) 题 目 网络聊天室的设计 课 程 名 称 通信应用软件课程设计 专 业 计算机通信 班 级 算通 111 学 生 姓 名 余丹红 学 号 208110410 设 计 地 点 信息楼 C216 指 导 教 师 耿 鹏 设计起止时间:2013 年 12 月 2 日至 2013 年 12 月 6 日 成绩 基于 Linux 网络聊天室的设计 2 共 18 页 目录 第一章.概述 .3 1.1 LINUX简介 .3 1.1 TCP/UDP 简介.3 1.21 TCP 通

2、信 .3 1.22 UDP 通信.3 1.3 SOCKET简介 .4 1.4 关系模式 .4 第二章.课题设计介绍 .4 2.1 课题背景 .5 2.2 发展与现状 .8 2.3 功能概述 . 10 2.4 系统结构设计.10 2.5 流程图.10 第三章.程序实现 .12 3.1 方案模块简介 .12 3.2 相关函数解释 .14 3.2 相关代码分析.14 第四章.功能演示 .14 4.1 测试过程说明 .12 4.2 结果显示.12 第五章.总结与展望 .16 5.1 过程错误与分析.16 5.2 软件优缺点.16 5.3 课程设计心得 .16 第六章.参考文献 .17 基于 Linux

3、 网络聊天室的设计 3 共 18 页 第一章第一章 概述概述 1.11.1 LinuxLinux 简介简介 Linux 是一种针对 PC 计算机和工作站的操作系统,它具有像 Windows 和 Mac 那样的功 能齐全的图形用户界面(GUI,Graphical User Interface)。Linus Torvald 和其它的遍布 世界各地的编程人员共同开发的1。 提到 Linux 我们不能不提 GNU 和 Unix。Richard M.Stallman 建立的自由软件联盟出版了 两种许可证,GNU 通用公共许可证(GNU Gneral Public License,GPL)和 GNU 函数

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

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

6、独立 开发的 Unix 版本也开始萌生。Unix 不断发展了,各种版本被应用到不同的计算机使用。而 Linux 最初是专门为基于 Intel 的个人计算机设计的。 (1)(1) LinuxLinux起源起源 Linux 操作系统是 UNIX 操作系统的一种克隆系统。它诞生于 1991 年的 10 月 5 日 (这是第一次正式向外公布的时间) 。以后借助于 Internet 网络,并经过全世界各地计算机 爱好者的共同努力下,现已成为今天世界上使用最多的一种 UNIX 类操作系统,并且使用 人数还在迅猛增长。通常所说的 Linux,指的是 GNU/Linux ,即采用 Linux 内核的 GNU

7、操作系统。 GNU 代表既是一个操作系统,也是一种规范。 Linux 最早由 Linus Torvalds 在 1991 年开始编写。在这之前,Richard Stallman 创建了 Free Software Foundation(FSF)组 织以及 GNU 项目,并不断的编写创建 GNU 程序(程序的许可方式均为 GPL:General PublicLicense)。在不断的有程序员和开发者加入到 GNU 组织中后,变造就了今天我们所 看到的 Linux!以 Linux 内核的 GUN/Linux 操作系统使用了大量的 GNU 软件,包括了 shell 基于 Linux 网络聊天室的设计

8、 4 共 18 页 程序、工具、程序库、编译器及工具,还有许多其他程序,例如 Emacs。正因为如此, GNU 计划的开创者理查德马修斯托曼博士提议将 Linux 操作系统改名为 GNU/Linux。但有些人只把操作系统叫做Linux。Linux 的基本思想有两点:第一,一切 都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条 详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、 进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。Linux 是一种自 由和开放源码的类 Unix 操作系统。 (2) Linux 发展发展 目前

9、存在着许多不同的 Linux,但它们都使用了 Linux 内核。Linux 可安装在各种计算 机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和 超级计算机。Linux 是一个领先的操作系统,世界上运算最快的 10 台超级计算机运行的都 是 Linux 操作系统。严格来讲,Linux 这个词本身只表示 Linux 内核,但实际上人们已经 习惯了用 Linux 来形容整个基于 Linux 内核,并且使用 GNU 工程各种工具和数据库的操作 系统。Linux 得名于计算机业余爱好者 Linus Torvalds。 作为一各服务器级的操作系统,Linux 已经成熟了。现在

10、的 Linux 内核由 150 多行代码组成,能作为 Web 服务器平台,也为越来越多的商业用户提供文件和打 印服务。它既被当作邮件服务器的一种候选平台,也被当作一种强壮而安全的防 火墙。 Linux 的企业级特性,比如支持多处理器、支持大型文件系统、日志文件系 统以及密集型计算和高可用性集群技术,也逐步成熟。 桌面上的 Linux 也在继续完善。KDE 桌面提供的图形用户界面在易用性和可 配置方面都能和微软的 Windows 相媲美。 (3)(3) LinuxLinux展望展望 Linux 最强大的生命力在于其公开的开发过程。每个人都有可以自由获取内 核源程序,每个人都有要不得以运载源程序加

11、以修改,而后他人也可以自由获取 你修改后的源程序。Linux 这种独特的自由流畅的开发模型已被命名为 bazaar(集市模型) 。Bazaar 开发模型通过重视实验,征集并充分利用早期的反 馈,对巨大数量的脑力资源进行平衡配置,可以开发出更优秀的软件。本联盟就 是想通过 bazaar 开发模型,在网上召集一些 Linux 的爱好者,开发出更优秀的操 作系统或软件。 1.21.2 TCP/UDPTCP/UDP 简介简介 (1)TCP 通信通信 TCP 是传输控制协议的简称,它是提供一条全双工的、可靠的信道。TCP 提供面向连接 的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。 基

12、于 Linux 网络聊天室的设计 5 共 18 页 由于 TCP 要提供可靠的、面向连接的运输服务,所以不可避免地增加了许多系统开销, 比如确认、流量控制、计时器以及连接管理等都需要占用许多系统的时空资源。 两个计算 机之间如果使用 TCP 通信,其连接过程需要三次握手实现。 因为我们这个程序所采用的是面向连接的 TCP 协议,所以我们这里就只对 TCP(传输 控制协议)这一部分作详细的介绍。 传输控制协议(TCP:Transmission Control Protocol)是一个 TCP/IP 组中能够实 现可靠数据传送的传输层协议,并通过顺序响应能实现对应用程序的虚拟连接服务,在必 要的时

13、候进行包转发。与 IP 协议相结合,TCP 代表了网络协议的核心。 大多数网络应用程序是在相同的机器上运行的,计算机上必须能确保目的地的应用程 序从源地址处获得数据包,及源计算机上的应用程序的回复获得选择的路经。这一过程是 通过使用 TCP 的“端口号”完成的。网络 IP 地址和端口号的连接要达到唯一的标识,我们 称之为“套接字”或“端点”。为了可靠通信,TCP 在端点间建立了连接或虚拟电路。 TCP 是面向连接的端到端的可靠协议,并保证传送数据包的顺序,而顺序是用一个响应 序号来保证的,这个响应序号告诉接收者发送者期望的下一个包。如果在规定时间内,没 有收到关于这个包的确认响应,则需要重新发

14、送此包。TCP 的可靠机制允许设备处理丢失、 删除及读错的包。暂停机制允许设备监测丢失的包并请求重发。 全双工操作:TCP 进程能够同时发送和接收包。 TCP 中的多路技术:大量上层同时会话在单连接时进行多路复用。 (2)UDP 通信通信 UDP 是用户数据报协议的简称。它是以中午连接的逻辑通信信道。UDP 在传送数据之前 不需要先建立连接,远地主机的传输层在收到 udp 数据报后,不需要给出任何确认,所以不 能保证其交付时可靠。它的特点是:因无连接,故提供的是不可靠的信道,但也是因无连接 而具有很好的传输效率。 UDP 协议是英文 User Datagram Protocol 的缩写,即用户

15、数据报协议,主要用来支持 那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服 务器模式的网络应用都需要使用 UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽 然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP 仍然不失为一项非 常实用和可行的网络传输层协议。 与我们所熟知的 TCP(传输控制协议)协议一样,UDP 协议直接位于 IP(网际协议) 协议的顶层。根据 OSI(开放系统互连)参考模型,UDP 和 TCP 都属于传输层协议。 UDP 协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是 一个二进制数据的传输单位。每

16、一个数据报的前 8 个字节用来包含报头信息,剩余字节则 用来包含具体的传输数据。 1.31.3 socketssockets 简介简介 基于 Linux 网络聊天室的设计 6 共 18 页 Socket 实际是网络传输层供给应用层的编程接口。应用层通过传输层进行数据通信时, TCP 和 UDP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP 连接或多个应 用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和 连接,许多计算机操作系统为应用程序与 TCPIP 协议交互提供了称为套接字(Socket)的 接口,区分不同应用程序进程间的网络通信和连接。

17、socket 非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互 通信的 2 个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分 配给每个用户的局内号码相当于 socket 号。任何用户在通话之前,首先要占有一部电话机, 相当于申请一个 socket;同时要知道对方的号码,相当于对方有一个固定的 socket。然后 向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于 给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求), 拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话

18、 机发出信号和对方从电话机接收信号的过程,相当于向 socket 发送数据和从 socket 接收 数据。通话结束后,一方挂起电话机相当于关闭 socket,撤消连接。 Socket 可以看成在 两个程序进行通信连接中的一个端点,一个程序将一段信息写入 Socket 中,该 Socket 将 这段信息发送给另外一个 Socket 中,使这段信息能传送到其他程序中。 网络化的应用程序在开始任何通讯之前都必须创建套接字,生成套接字,主要有 3 个 参数:通信的目的 IP 地址、使用的传输层协议、使用的端口号。传输层则在网络层的基础 上提供进程到进程问的逻辑通道,而应用层的进程则利用传输层向另一台主

19、机的某一进程 通信。Socket 就是应用层与传输层之间的桥梁。使用 Socket 编程时可以开发客户机和服 务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行 通信。编写并运行 Socket 的客户端和服务器端程序,双方通过套接字建立了服务连接请 求,并且通过一些方法提高 Socket 的性能。随着 Internet 的日益发展和普及,网络在嵌 入式系统中应用非常广泛,越来越多的嵌入式设备采用 Linux 操作系统。Linux 是一个源 代码公开的免费操作系统,具有强移植性,所以对基于 Linux 的 Socket 网络编程的研究越 来越重要。 区分不

20、同应用程序进程间的网络通信和连接,套接字主要有 3 个参数:通信的目的 IP 地址、使用的传输层协议(TCP 或 UDP)和使用的端口号。通过将这 3 个参数结合起来,与一 个 Socket 绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网 络连接的通信,实现数据传输的并发服务。 Socket 接口上 TCP/IP 网络应用程序接口(API) ,它提供了许多函数和例程,程序员可以 使用它们来开发 TCP/IP 网络应用程序。 使用 Socket 接口进行网络通信的过程如图 1-3 所示,简要步骤如下: (1)建立一个 Socket. 基于 Linux 网络聊天室的设计 7

21、 共 18 页 (2)按要求配置 socket,将 socket 连接到远程主机或给 socket 指定以各本地协议端口。 (3)按要求通过 socket 发送和接受数据。 (4)关闭此 socket。 这是通过 Socket 实现点对点通信需要掌握的 4 个编程要点。 第二章第二章 课题设计介绍课题设计介绍 2.1 课题背景课题背景 在网络无所不在的今天,在 Internet 上,有 ICQ、MSN、Gtalk、OICQ 等网络聊天软件, 极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好像一下子缩小了, 不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发送信息,不管对

22、方是 否也同时在线,只要知道他有号码。 本次设计主要是为了加强对 Linux 系统下的编程的各种知识点的整合与灵活运用,让 我们更加熟悉 Linux 下的编程操作。重点在 Linux 下 socket 编程,了解 TCP、UDP 等协议 的使用,并完成课设题目。通过设计这样的一个应用程序还能更好的学习网络编程知识和 掌握 Linux 平台上应用程序设计开发的过程,将所学知识综合运用,以达到检验学习成果 的目的。 2.2 发展与现状发展与现状 网络的诞生从某种意义上来说改变了我们的生活,它将这个世界的上不同地域的人之 间的距离拉近了。伴随着网络的诞生,网络聊天软件也随之而来。最初的网络聊天软件只

23、 是有简单的文本界面,功能也十分有限,随着技术的不断发展与强大,拥有更多功能和美 观界面的聊天程序走进了我们的生活,也有越来越多的人将网络聊天软件作为他们日常生 活交流和通信的工具。 网络聊天软件在国外有 ICQ 等,在国内主要有 OICQ、Ticq 和一些基于网页的即时通讯 工具,像 Chinaren 网站上的 WebMaster 等等,都做得即美观,且功能强大,OICQ 现在拥 有非常大的用户群。 现在也有很多在网络上不使用服务器的通讯软件,这种软件小巧且方便,也能解决一部 分问题。但是有服务器的通讯软件,有着不可比拟的优势:可以发送离线消息,不管用户 当时是否在线,下次上线时,就可以看到

24、这条消息了。可以保存用户的个人信息或个人简 介,供人查看。而且,无服务器的通讯软件,是以机器为通讯单元的,而有服务器的聊天 软件是以人为通讯单元的。所以,带服务器的聊天软件在网络上,有着非常广泛的用途, 为网络上的通讯带来了极大的方便,它使人与人之间的交流不再只局限于某一个范围,并 且它的开销也是很小的,你只需要拥有一部可以联网的 PC 机就足够了。 由于 Linux 的开源的特点,越来越多的人转而使用 Linux 做为 PC 机的操作系统。但是 Linux 的真正兴起只是在最近几年,因此很多功能并不是很完善,并且由于 Linux 的开源特 征,很多软件开发公司很难从中获得直接利益,因此很多

25、Windows 上的实用的软件,在 基于 Linux 网络聊天室的设计 8 共 18 页 Linux 下却很少见。本课程设计正是为了解决 Linux 下局域网聊天问题而设计的,并且希望 通过本课程设计可以更好的了解 Linux 操作系统的原理,进一步掌握 vi,gcc 等工具的使 用,并且熟悉 Linux 下的网络编程,以及多线程编程。 2.3 功能概述功能概述 本课程设计主要实现一个 Linux 下的局域网聊天工具的设计。该设计主要分为两部分: 客户端部分和主机部分。运行服务器端程序可以和任意运行了客户端程序的主机进行通信, 通信内容能够通过终端显示出来。两个部分都使用 C 语言,利用 vi

26、 编辑器,gcc 编译器, 通过 Berkeley 套接口编程实现相关功能。 Linux 系统下的 gcc(GNU C Compiler)是 GNU 推出的功能强大、性能优越的多平台编译 器,是 GNU 的代表作品之一。gcc 是可以在多种硬体平台上编译出可执行程序的超级编译 器,其执行效率与一般的编译器相比平均效率要高 20%30% 。gcc 编译器能将 C、C+ 语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件 的名字,gcc 将生成一个名为 a.out 的文件。 2.4 系统结构设计系统结构设计 本系统采用客户/服务器模型,在 TCP/IP 网络应用中,通信

27、的两个进程间相互作用的主 要模式是客户/服务器模式(Client/Server model) ,即客户向服务器发出服务请求,服务 器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网 络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源 的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异 步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希 望通信的进程间建立联系,为二者的数据交换提供同步,这就是客户端/服务器模式的 TCP/IP。在客户/服务器模型中,多个相互通信的计算机都作为客

28、户端,与网络服务器进行 连接,并通过服务器进行信息的传递。所以多个客户端之间的通信就变为了客户端与服务端 的通信。 服务器端和客户端的主要组成如下: 服务器端:套接字创建函数 Socket(),端口绑定函数 Bind(),套接口监听函数 Listen(), 接受连接函数 Accept(),数据收发函数 Read()和 Write(),以及套接口关闭函数 Close()。 客户端:套接口创建函数 Socket(),套接口连接函数 Connect(),数据收发函数 Read() 和 Write(),以及套接口关闭函数 Close()。 在调用时,首先运行服务器端程序,通过 Socket()函数会建

29、立一个套接字,然后通过 Bind()函数绑定一个端口,然后调用 Listen()在套接字指定的端口上开始倾听,利用 Accept()从完全建立连接的队列中接受一个连接,连接获得后使用 Read()和 Write()函数进 行通信。通信结束后调用 Close()关闭套接字描述符。 运行客户端的程序,调用 Socket()函数建立一个套接字,使用 Connect()函数与服务器端 基于 Linux 网络聊天室的设计 9 共 18 页 进行连接,连接完成后,使用 Write()和 Read()与服务器端进行通信,通信结束后调用 close()关闭套接字描述符。 2.52.5 流程图流程图 图 1 S

30、ocket 通信流 第三章第三章 程序实现程序实现 3.23.2 方案模块简介方案模块简介 Linux 系统采用 C 语言开发, TCP 方式进行连接。采用 C/S 结构。 TCP 网络编程的流程包含服务器和客户端两种模式。服务器模式创建一个服务程序, 等待客户端用户的连接,接收到用户的连接请求后,根据用户的请求进行处理;客户端模 式则根据目的服务器的地址和端口进行连接,向服务器发送请求并对服务器的响应进行数 据处理。 (1)服务器端程序包括 建立套接字( socket()) 套接字与端口的绑定(bind() 设置服务器的侦听连接(listen()) 接收客户端连接(accept()) 接收和

31、发送数据(send(),recv()) 关闭套接字(close() 1、套接字初始化过程中,根据用户对套接字的需求来确定套接字的选项。按照用户 定义的网络类型,协议类型和具体的协议标号等参数来定以 socket()函数。系统根据用户 的需求生成一个套接字文件描述符供用户使用。 2、套接字与端口的绑定过程中,将套接字与一个地址结构进行绑定。绑定之后,套 接字所代表 IP 地址和端口地址及协议类型等参数按照绑定值进行操作。 基于 Linux 网络聊天室的设计 10 共 18 页 3、由于一个服务器需要满足多个客户端的连接请求,而服务器在某个时间仅能处理 有限个数的客户端连接请求,所以服务器需要设置

32、服务器端排队队列的长度。 4、在客户端发送连接请求之后,服务器需要接收客户端的连接,然后才能进行其他 的处理。 5、在服务器接收客户端请求之后,可以从套接字文件描述符中读取数据或者向文件 描述符发送数据。接收数据后服务器按照定义的规则对数据进行处理,并将结果发送给客 户端。 6、当服务器处理完数据,要结束与客户端的通信过程的时候,需要关闭套接字连接 (2)客户端程序包括 建立套接字(socket() 连接服务器(connect() 读写网络数据(send(),recv() 关闭套接字(close() (3)服务器端和客户端程序的区别 客户端程序和服务器端程序不同之处是客户端在建立套接字之后可以

33、不进行地址绑定, 而是直接连接服务器端。 服务器端有 listen()和 accept()两个函数,而客户端不需要这两个函数。 3.2 相关函数解释相关函数解释 (1)Socket() 作用:socket 函数为客户机或服务器创建一个 sokcet 格式:int socket(int family,int type,int protocol); 参数说明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。 其中,AF_UNLX 只能够用于单一的 UNIX 系统进程间通信;AF_INT 是针对 Internet 的,因 而可以允许在远程主机之间通信,实验中使用 AF_INT。

34、 Type:网络程序所采用的通信协议,可以取 SOCK_STREAM 或 SOCK_DGRAM。其中, SOCK_STREAM 表明使用的是 TCP 协议,这样提供按顺序、可靠、双向、面向连接的比特流; SOCKE_DGRAM 表明使用的是 UDP 协议,这样只会提供定长、不可靠、无连接的通信。 (2)bind( ) 格式:int bind(int sockfd,struct sockaddr *addr,int addrlen); 参数说明:Sockfd:socket 的文件描述符号。 Sockaddr:表示名字所用的一个数据结构,用来保存地址(包括 IP 地址和端口) Addrlen:设置

35、结构大小长度。 (3)listen() 格式:int listen(int sockfd, int backlog); 基于 Linux 网络聊天室的设计 11 共 18 页 作用:监听连接信号,和 accepted 函数合同。 参数说明:Sockfd:表示 socket 调用返回的文件描述符。 Backlog:表示接入队列允许的连接数目,大多数系统允许 20 个,也可以子定义 510 个。 (4)accept() 格式:Int accept (int sockfd, void *addr, int *addrlen); 作用:与 listen 函数合用,监听信息、接收客户端请求。 参数说明:

36、 Sockfd:表示 socket 的文件描述符。 Addr:表示指向局部的数据结构 struct sockaddr-in 的指针。 Addrlen:表示地址的长度。 (5)connect() 格式:int connect( int sockfd , struct sockaddr *serv_addr , int addrlen); 作用:在面向连接的系统中客户及连接服务器时使用,connect 必须在 bind 后使用。 参数作用: Sockfd:表示 socket 的文件描述符。 Serv-addr:表示村访目的端口和 ip 地址(套接字)的数据结构。 (6)send() 和和 recv

37、() 格式 1:Int send (int sockfd, const vod *msg,int len, int flags); 功能:发送信息。 格式 2:Int recv (int sockfd , void *buf,int len, usigned int flags); 作用:用于流式 socket、数据报 socket 内部之间的通信。 (7)close( ) 和和 shutdown ( ) 格式:Close( int sockfd)或 Int shutdown(int sockfd , int how); 参数说明: How 的值为下面一种: 0-不允许继续接收; 1-不允许继

38、续发送; 2-不允许继续发送和接收。 3.2 相关代码分析相关代码分析 1.server.c int main(int argc, char *argv) int sockfd,clientfd,sin_size,recvbytes; /定义监听套接字、客户套接字 pid_t pid,ppid; /定义父子线程标记变量 基于 Linux 网络聊天室的设计 12 共 18 页 char *buf, *r_addr, *w_addr, *temp, *time_str;/=0; /定义临时存储区 struct sockaddr_in their_addr; /定义地址结构 key_t shmid;

39、 shmid = shm_create(); /创建共享存储区 temp = (char *)malloc(255); /dongtai fenpeikongjian time_str=(char *)malloc(20); sockfd = bindPort(MYPORT);/绑定端口 while(1) if(listen(sockfd,BACKLOG) = -1)/在指定端口上监听 perror(listen);exit(1); printf(Listening.n); if(clientfd = accept(sockfd,(struct sockaddr*) exit(1); prin

40、tf(accept from:%dn,inet_ntoa(their_addr.sin_addr); send(clientfd,WELCOME,strlen(WELCOME),0);/发送问候信息 buf = (char *)malloc(255); ppid = fork();/创建子进程 if(ppid = 0) pid = fork(); /创建子进程 while(1) if(pid 0) /父进程用于接收信息 memset(buf,0,255); if(recvbytes = recv(clientfd,buf,255,0) h_addr); bzero( if(connect(cl

41、ientfd,(struct sockaddr *)exit(1); . pid = fork();/创建子进程 while(1) if(pid 0) /父进程用于发送信息 strcpy(buf,argv3); strcat(buf,:); memset(buf_r,0,100); /接收信息 fgets(buf_r,100,stdin); strncat(buf,buf_r,strlen(buf_r)-1); if(sendbytes = send(clientfd,buf,strlen(buf),0) = -1) perror(sendn);exit(1); else if(pid = 0

42、) /子进程用于接收信息 memset(buf,0,100); if(recv(clientfd,buf,100,0) = 0) perror(recv:);close(clientfd);raise(SIGSTOP);exit(1); printf(%sn,buf); else perror(fork); close(clientfd); return 0; 基于 Linux 网络聊天室的设计 14 共 18 页 第四章第四章 功能演示功能演示 4.14.1 测试过程说明测试过程说明 (1)在编写完 TCP 服务端程序 server.c 后,用 gcc o server.c server 生

43、成程序 server。 (2)在编写完 TCP 客户端程序 client.c 后,用 gcc o client.c client 生成程序 client。 (3)在主机上打开一终端,用./server 来运行 server。 (4)再在同个主机上打开另一个终端或者在另一台机器上打开一个终端,用./server 来运 行 client,输入服务器的 IP 地址,作为第一个客户。 (5) 重复(4)的操作,作为第二个客户。 (用户可自己定义客户个数,该程序定义了 10 个,同一时间可以有 10 个用户一起群聊) (6)在多个窗口分别输入聊天内容,并在两个客户端和服务器上看输出结果,检查器结果的 正

44、确性。 输入:【服务器端】$ ./server 【客户端 1】$ ./client 127.0.0.1 1992 ydh 【客户端 2】$ ./client 127.0.0.1 1992 wl (6) 服务器端窗通过键盘输入消息并回车以发送消息给对方,客户端和服务器端同时显示 4.24.2 结果显示结果显示 1.1.查看本地查看本地 IPIP 2.2.服务器端服务器端 基于 Linux 网络聊天室的设计 15 共 18 页 3.3.客户端客户端 4.4.聊天界面,在俩个客户端进行聊天,在服务器端监听聊天界面,在俩个客户端进行聊天,在服务器端监听 基于 Linux 网络聊天室的设计 16 共 18 页 5.5.一个客户端退出,在服务器端和另一个客户端的显示一个客户端退出,在服务器端和另一个客户端的显示 基于 Linux 网络聊天室的设计 17 共 18

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论