Linux网络聊天室设计方案 .docx

上传人:Che****ry 文档编号:13051582 上传时间:2022-04-27 格式:DOCX 页数:42 大小:98.26KB
返回 下载 相关 举报
Linux网络聊天室设计方案 .docx_第1页
第1页 / 共42页
Linux网络聊天室设计方案 .docx_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《Linux网络聊天室设计方案 .docx》由会员分享,可在线阅读,更多相关《Linux网络聊天室设计方案 .docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品名师归纳总结封面可编辑资料 - - - 欢迎下载精品名师归纳总结作者: PanHongliang仅供个人学习姓名: 方 建学号: 109074359班级:网络工程 103可编辑资料 - - - 欢迎下载精品名师归纳总结1 背景1.1 开发背景在网络无所不在的今日,在Internet 上,有 ICQ 、MSN 、Gtalk、OICQ等网络谈天软件,极大程度上便利了处于在世界各的的友人之间的相互联 系,也使世界好像一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的伴侣发送信息,不管对方是否也同时在线,只要知道他有号码。Linux 操作系统作为一个开源的操作系统被越来越多的人所

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

3、系统 ,它具有像 Windows 和 Mac 那样的功能齐全的图形用户界面( GUI,Graphical User Interface。 Linus Torvald 和其它的遍布世界各的的编程人员共同开发的。作为一种操作系统 ,可编辑资料 - - - 欢迎下载精品名师归纳总结它 具 有 与 Unix,Mac,Windows和 WindowsNT同 样 的 功 能 。提到 Linux 我们不能不提 GNU 和 Unix 。Richard M.Stallman 建立的自由软件 联 盟 出版 了 两 种 许 可证 ,GNU通 用公 共 许 可 证 GNU Gneral Public License,

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

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

6、此同时 ,其它独立开发的 Unix 版本也开头萌生。 Unix 不断进展了 ,各种版本被应用到不同的运算机使用。而Linux 最初是特的为基于Intel 的个人运算机设计的。( 1)Linux 的昨天 1991 年,一名叫 Linus Torvalds 的芬兰高校生对 Unix 各种版本对于 80386 类的机器的脆弱支持特殊不满,他准备要开发出一个全功能 的、支持 POSIX 标准的、类 Unix 的操作系统内核 ,该系统吸取了 BSD 和可编辑资料 - - - 欢迎下载精品名师归纳总结System V 的优点 ,同进摒弃了它们的缺点。他独立把这个内核开发到0.02 版, 这个版本已经可以运

7、行gcc、bash 和很少的一些应用程序。后来 ,他又开头了在因特网上寻求广泛的帮助。1994 年,Linux 已经升级到 1.0 版本。它的源代码量也呈指数形式增长 ,实现了基 本 的 TCP/IP功 能 , 此 时 Linux已 经 拥 有 大 约 10万 的 用 户 。(2)Linux的今天作为一各服务器级的操作系统,Linux 已经成熟了。现在的Linux 内核由150 多行代码组成 ,能作为 Web 服务器平台 ,也为越来越多的商业用户供应文件和打印服务。它既被当作邮件服务器的一种候选平台,也被当作一种强壮而安全的防火墙。Linux 的企业级特性 ,比如支持多处理器、支持大型文件系统

8、、日志文件系统 以 及 密 集 型 计 算 和 高 可 用 性 集 群 技 术 , 也 逐 步 成 熟 。桌面上的 Linux 也在连续完善。 KDE 桌面供应的图形用户界面在易用性和可 配 置 方 面 都 能 和 微 软的Windows相 媲 美 。( 3) Linux的明天 Linux 最强大的生命力在于其公开的开发过程。每个人都有可以自由猎取内核源程序,每个人都有要不得以运载源程序加以修改,而后他人也可以自由猎取你修改后的源程序。Linux 这种特殊的自由流畅的开发模型已被命名为 bazaar(集市模型)。 Bazaar 开发模型通过重视试验 ,征集并充分利用早期的反馈 ,对巨大数量的脑

9、力资源进行平稳配置,可以开发出更优秀的软件。本联盟就是想通过bazaar开发模型 ,在网上召集一些 Linux 的爱好者,开发出更优秀的操作系统或软件。可编辑资料 - - - 欢迎下载精品名师归纳总结2 技术说明2.1 TCP 和 UDP 通信的概念2.1.1 UDP 通信UDP 是用户数据报协议的简称。它是以中午连接的规律通信信道。UDP 在传送数据之前不需要先建立连接,远的主机的传输层在收到udp 数据报后,不需要给出任何确认,所以不能保证其交付时牢靠。它的特点是:因无连接,故供应的是不行靠的信道,但也是因无连接而具有很好的传输效率。2.1.2 TCP 通信TCP 是传输把握协议的简称,它

10、是供应一条全双工的、牢靠的信道。TCP 供应面对连接的服务,在传送数据之前必需先建立连接,数据传送终止后要释放连接。 TCP 不供应广播和多播服务。由于 TCP 要供应牢靠的、面对连接的运输服务,所以不行防止的增加了许多系统开销,比如确认、流量把握、计时器以及连接治理等都需要占用许多系 统的时空资源。 两个运算机之间假如使用TCP 通信,其连接过程需要三次握手实现,照试验图 1-1 所示。图 1-1 用三次握手建立 TCP 连接对于两个运算机之间连接的释放过程也需要类似的3 次握手的相互确认的过程,照试验图 1-2 所示。图 1-2 TCP 连接的释放过程可编辑资料 - - - 欢迎下载精品名

11、师归纳总结2.2 客户/服务器模型在客户/服务器模型中,多个相互通信的运算机都作为客户端,与网络服务 器进行连接,并通过服务器进行信息的传递。所以多个客户端之间的通信就变 为了客户端与服务端的通信。所以,接受客户/服务器模型进行网络谈天需要分别编写服务器端和客户端的程序,服务器和客户端之间相互通信的同步关系 和各自的程序流程照试验图 1-3 所示。图 1-3 Socket通信流程图2.3 网络套接字( socket )的概念1介绍上世纪中后期 ,在美国国防部高研署 DARPA将TCP /IP的软件供应应加利尼亚高校 Berkeley分校后 , TCP /IP很快被集成到 Unix中,同时显现了

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

13、 Linux网络特性的一个关键因素。2 Socket原理简介可编辑资料 - - - 欢迎下载精品名师归纳总结当用电话与他人通信时 ,必需拿起话筒 ,拨叫对方的电话号码 ,然后等待对方的应答。当双方进行通话的时候 ,就建立了一个具有两个端点的通 信线路 , 这两个端点是 : 本的的电话号码 在本位置置 。对方的电话号码 在对方的位置处 。双方的通信与通信的两个端点和他们之间的通信线路 有关。 Linux中的套接口与电话特殊相像。套接口代表通信线路中的端点, 两端点之间就是数据通信网络。套接口与电话的相像性仍表现在另一方面。当给某人打电话时 ,拨叫的是对方用户的电话号码。而套接口中的网络的址就相当

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

15、Socket分为以下三种类型 :流式套接字 Stream Socket :是最常用的套接字类型 ,文件传送协议 FTP即使用流式套接字。供应一个面对连接、牢靠的数据传输服务,数据无差错、无重复的发送 ,且按发送次序接收。内设流量把握,防止数据流可编辑资料 - - - 欢迎下载精品名师归纳总结超限。 数据被看作 是字节流,无长 度限制。 数据报套接字 Datagram Socket : TCP /IP协议族中的 UDP协议使用此类接口 ,它是无连接的服务 , 数据通过相互独立的报文进行传输,供应了一个无连接服务。数据包以独立 包形式被发送 ,不供应无错保证 ,数据可能丢失或重复 ,并且接收次序混

16、 乱。原始数据报套接字 Raw Socket :该接口答应对较低层协议 ,如IP 、ICMP 直接拜望。常用于检验新的协议实现或拜望。3 Socket通信过程与程序开发3.1 Socket通信过程基于TCP 牢靠连接的客户与服务器连接进程流程图如图2。Socket 工作过程如下 : 服务器第一启动 , 通过调用 Socket , 建立一个Socket, 然后调用 bind 将该Socket 和本的网络的址绑系在一起 , 再调用listen 使Socket 做好侦听的预备 , 并规定它的请求队列的长度 , 之后就调用accept 来接收连接。客户在建立 Socket 后就可调用 connect

17、和服务器建立连接。连接一旦建立 , 客户机和服务器之间就可以通过调用 send 和recv 来发送和接收数据。最终 , 待数据传送终止后 , 双方调用 close 关闭Socket 。3.2 Socket通信程序开发下面详细说明 Socket 通信程序的开发过程 : 1步骤1:建立套接口 socketint sockfd = socket int domain, int type, intprotocol ,其中 domain 参数指定 socket协议族 ,包括 PF_LOACL和PF_INET, PF_LOACL 表示使用本的套接口 , PF_INET表示使用 Internet套接口。 T

18、ype 参数定义可编辑资料 - - - 欢迎下载精品名师归纳总结了套接口的类型 , 包括SOCK_STREA和MSOCK_DGRAM, SOCK_STR指EA定M为流套接口 ,SOCK_DGRA指M定为数据报套接口。 protocol 通常赋值“ 0” , 意味套接口使用 TCP /IP 协议。 socket 调用返回一个整型 socket 描述符 , 可以在后面的调用使用它 , 当其值为 - 1 时, 说明有错误发生。 2 步骤2: 绑定套接口 bind当用socket建立套接口后 ,该套接口仍是处于无名状态的,无名套接口就象没有号码的电话一样, 别人无法向发送信息 在同一 linux内核下

19、可实现无名状态下通信 。为了像电话支配电话号码一样 ,可以通过 bind为建立的套接口绑定一个名字支配的址。这一步对客户端不是必需的。int bind int sockfd, struct sockaddr_my_addr,int addrlen 。sockfd 是一个socket 描述符, my_addr 是一个指图 运算机应 用 向包含有本机IP 的址及端口号等信息的sockaddr 类型的指针。addrlen 常被设置为 sizeof structockaddr ,假如函数调用成功 , 就返回0, 否就就返回为 - 1, 我们可以通过查看 errno 的值来明白错误的原因。需要指出的是

20、, 可以用下面的赋值实现自动获得本机 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函数在成功被调用时返回 0。 遇到错误时返回“ - 1 ”并将 errno置为相应的错误号。另外要留意的是,当

21、调用函数时,一般不要将端口号置为小于1024 的值,由于 1 1024 是保留端口号 ,可编辑资料 - - - 欢迎下载精品名师归纳总结可以使用大于 1024 中任何一个没有被占用的端口号。( 3 步骤 3: 请求连接connect 当客户端绑定的址后 , 发送请求连接信号 connect 来与远端服务器建立一个 TCP 连接。 connect 函数原型为 :int connect int sockfd,struct sockaddr serv_addr, int addrlen 。 sockfd 是目 的服务器 的socket描 述符 。 serv_addr 是包含目 的机 IP的 址和 端

22、口号的 指针 , addrlen为结构的大小。遇到错误时返回- 1,并且 errno中包含相应的错误码。进行客户端程序设计无须调用bind,由于这种情形下只需知道目的 机器的 IP 的址,而客户通过哪个端口与服务器建立连接并不需要关怀,内核会自动选择一个未被占用的端口供客户端来使用。 4步骤4:监听连接listen在服务器端程序中 ,当socket与某一端口捆绑以后,就需要监听该端口,以便对到达的服务请求加以处理。int listen int sockfd, int backlog。sockfd是Socket系统调用返回的socket描述符。 backlog指定在请求队列中答应的最大请求数,进

23、入的连接请求将在队列中等待 accept 它们。 backlog对队列中等待服务的请求的数目进行了限制 ,对于小型服务器 ,队列长度应当为 5 或是稍大一些的值,而对于网站服务器 ,我们就需要更大的值,比如说 16 或是更大。当listen遇到错误时返回 - 1, errno被置为相应的错误码。 5步骤5:连接端口的服务请求当某个客户端试图与服务器监听的端口连接时, 该连接请求将排队等待服务器 accept 它。通过调用 accept函数为其建立一个连接 , accept函数将返回一个新的 socket描述符 ,来供这个新连接来使用。而服务器可以继 续在以前的那个 socket上监听 ,同时可

24、以在新的 socket描述符上进行数据可编辑资料 - - - 欢迎下载精品名师归纳总结send 发送和recv接收操作。int accept int sockfd, voidaddr, intaddrlen。sockfd是被监听的 socket描述符 , addr通常是一个指向 sockaddr_in变量的指针 ,该变量用来存放提出连接请求服务的主机的信息某台主机从某个端口发出该请求。 addrlen通常为一个指向值为sizeof( struct sockaddr_in的整型指针变量。错误发生时返回一个- 1并且设置相应的errno值。accept 之前,通常将 addrlen初始化为 0。

25、6步骤6:数据传输 send 和recvsend 和recv 这两个函数是用于面对连接的 socket上进行数据传输。send 函数原型为 :int send int sockfd, const voidmsg, int len, intflags。sockfd是想用来传输数据的socket描述符 , msg 是一个指向要发送数据可以是字符型、整型、浮点型等 的指针。 len是以字节为单位的数据的长度。 flags一般情形下置为 0。send函数返回实际上发送出的字节数,可能会少于期望发送的数据。所 以需要对 send 的返回值进行测量。当 send 返回值与 len不匹配时 ,应当对这种情形

26、进行处理。recv 函数原型为 :int recv int sockfd, voidbuf, int len, unsignedint flags。sockfd是接收数据的 socket描述符。 buf是存放接收数据的缓冲区。 len是缓冲的长度。 flags也被置为 0。recv返回实际上接收的字节数, 或当显现错误时 , 返回- 1并置相应的 errno值。可编辑资料 - - - 欢迎下载精品名师归纳总结 7 步骤7: 关闭连接 close当全部的数据操作终止以后,可以调用 close函数来释放该 socket,从而停止在该 socket 上的任何数据操作。摘要: 在Linux 下开发高性

27、能的网络通信程序 , 是充分发挥 Linux 网络特性的一个关键因素。 Socket 接口是 TCP /IP 网络最为通用的 API, Socket 在运算机中供应了一个通信端口 , 可以通过这个端口与任何一个具有 Socket 接口的运算机通信。Socket 接口上 TCP/IP 网络应用程序接口( API ),它供应了许多函数和例程,程序员可以使用它们来开发 TCP/IP 网络应用程序。2 Socket使用 Socket接口进行网络通信的过程如图 1-3 所示,简要步骤如下:(1) 建立一个 Socket.(2) 按要求配置 socket,将 socket 连接到远程主机或给 socket

28、 指定以各本的协议端口。(3) 按要求通过 socket发送和接受数据。(4) 关闭此 socket。这是通过 Socket实现点对点通信需要把握的 4 个编程要点。2.4 多线程的概念上述点对点通信的实现学问完成了主机进程与服务器进程之间的连接,建立连接的进程之间是一对一的联系,即主机的一个进程与服务器的一个进程之间建立的连接。而每个进程进行通信的环节都包括了发送信息和接口信息两个任务,这两个任务通过一个端口的址发送和接收。可编辑资料 - - - 欢迎下载精品名师归纳总结对于多个并发的任务需要创建多个线程或线程去实现。使用一个进程去完成发送信息是没有问题的,由于发送总是主动的。而使用同一个进

29、程再去完成接受信息去不愿定会成功,由于接受信息是被动的,所以当没有信息可以接收时,该进程就会被堵塞,从而导致发送任务也一起被堵塞。同一个端口的发送和接收是两个并发任务,应当由两个不同的任务去分别完成信息的发送和接 收。这样,当接收信息任务因没有信息而被堵塞时,不至于影响发送任务的执行。那么,发送和接收两个任务是使用两个进程仍是两个进程去完成了?在网络通信中,端口的址是以进程为单位进程支配的,而一个进程与外界的消息发送与接收必需通过支配给它的同一个端口进行。因此,不能通过创建进程方式来解决上诉问题,由于两个进程会分别对应两个不同的端口,而发送和接收必需使用同一端口。线程不是资源支配的单位,所以假

30、如使用两个线程不会对线程支配新的端口。因此,本试验需要使用两个线程去分别完成发送和接收信息的任务,这两个线程共享其进程拥有的统一个端口的址。由于创建进程的进程本身会作为一个线程来调度,所以只需要再创建一个线程特的负责接收信息就可以了。因此,对于从每个客户端发来的请求,服务器端都要创建相应的线程去接收并处理。同理,对于客户端而言,也要创建一个线程去读取服务器端发来的信息。3 系统实现3.1 Linux供应的有关 Socket的系统调用(1) Socket可编辑资料 - - - 欢迎下载精品名师归纳总结作用: socket函数为客户机或服务器创建一个sokcet格式:int socketint f

31、amily,int type,int protocol 。参数说明:Family:表示的址族,可以去 AF_UNLX 和 AF_INT 。其中, AF_UNLX只能够用于单一的 UNIX系统进程间通信。 AF_INT是针对 Internet 的,因而可以答应在远程主机之间通信,试验中使用AF_INT 。Type : 网 络 程 序 所 采 用 的 通 信 协 议 , 可 以 取SOCK_STREAM或SOCK_DGRAM 。其中, SOCK_STREAM 说明使用的是 TCP 协议,这样供应按次序的、牢靠的、双向、面对连接的比特流。SOCKE_DGRAM说明使用的是UDP 协议,这样只会供应定

32、长、不行靠、无连接的通信。(2) bind 格式:int bindint sockfd,struct sockaddr *addr,int addrlen。参数说明:Sockfd: socket的文件描述符号。Sockaddr:表示名字所用的一个数据结构,用来储存的址包括 IP 的址和端口 Addrlen:设置结构大小长度。(3) listen格式:int listenint sockfd, int backlog 。作用:监听连接信号,和 accepted函数合同。参数说明:可编辑资料 - - - 欢迎下载精品名师归纳总结Sockfd:表示 socket调用返回的文件描述符。Backlog:

33、表示接入队列答应的连接数目,大多数系统答应20 个,也可以子定义 510 个。(4) accept格式:Int accept int sockfd, void *addr, int *addrlen。作用:与 listen 函数合用,监听信息、接收客户端请求。参数说明:Sockfd:表示 socket的文件描述符。Addr:表示指向局部的数据结构 struct sockaddr-in的指针。Addrlen:表示的址的长度。(5) connect格式:int connect int sockfd , struct sockaddr *serv_addr , int addrlen。作用:在面对连

34、接的系统中客户及连接服务器时使用,connect 必需在 bind后使用。 参数作用:Sockfd:表示 socket的文件描述符。Serv-addr:表示村访目的端口和 ip 的址(套接字)的数据结构。(6) send 和 recv格式 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内

35、部之间的通信。(7) close 和 shutdown格式:Close int sockfd或Int shutdownint sockfd , int how。参数说明:How 的值为下面一种:0 不答应连续接收。1 不答应连续发送。2 不答应连续发送和接收。(8) 有关线程的系统调用函数 pthread_create、 pthread_join3.2 试验过程说明(使用 TCP/IP )(1) 监听连接利用 socket、bind、listen 建立连接,步骤是:1) 先用 socket函数初始化 socket,创建新的 sockfd。Sockfd = socket(AF_INT , SOC

36、K_STREAM,0 )2) 此步骤涉及到 IP 的址及其处理过程。参数说明:inet_addr 函数 INADDR_ANY可编辑资料 - - - 欢迎下载精品名师归纳总结该函数把由小数点分开的十进制IP 的址转为 unsinged long 类型,而在试验中所使用的为 INADDR_ANY ,使用利用自已的 IP 的址自动填充。a) 利用 bind 函数绑定端口和 IP 的址。My_addr.sin_family=AF_INET 。/*将的址族类型设定好 */ My_addr.sin_port=htonsMYPORT。/* 将端口给其赋值 */My_addr.sin_addr.s_addr=

37、INADDR_ANY 。 /* 用连接的址自动填充 ip*/Bindsockfd,stuct sockaddr*&my_addr,sizeofstuct sockaddr。/*sockfd 是支配的 socket 名字, my-addr 就便是支配好的端口与IP,用bind 绑定*/b) 利用 listen 监听请求(2) 发送请求1) 利用 gethostbyname猎取主机信息。2) 初始化 socket端口。3) 利用 connect 函数将自己的 IP 的址等信息发送到主机,等待主机调用accept函数来接受请求。(3) 主机接收请求,进行数据通信 1主机利用 accept接收请求。2

38、创建子进程,显示欢迎信息。3) 接收返回信息,显示连接成功,并推出连接。4) 关闭客户端口 socket。5) 关闭服务端 socket, 终止子线程。可编辑资料 - - - 欢迎下载精品名师归纳总结3.3 TCP 通信实现(1) 服务端源程序清单如下,设文件名为server.c #include#include #include #include #include #include #include #include #include #define MYPORT 3490#define BACKLOG 10#define MAXDATASIZE 1024int sockfd,new_fd。

39、pthread_t accthread,recthrea。dvoid recmessagevoid while1int numbytes。char bufMAXDATASIZE 。ifnumbytes = recvnew_fd,buf,MAXDATASIZE,0 = -1 perrorrecv 。exit1 。可编辑资料 - - - 欢迎下载精品名师归纳总结bufnumbytes = 0。ifstrcmpbuf,exit = 0 printfClient is closedn 。closenew_fd。closesockfd。exit1。printfClient:%sn,buf 。void a

40、cceptconnectvoid struct sockaddr_in their_addr。int sin_size。sin_size = sizeofstruct sockaddr_in。ifnew_fd = acceptsockfd,struct sockaddr*&their_addr,&sin_size = -1 perroraccept。exit1。printfserver:got connection from %sn,inet_ntoatheir_addr.sin_addr。ifpthread_create&recthread,NULL,void *recmessage,NUL

41、L.= 0printfCreate thread error.rn 。exit1。可编辑资料 - - - 欢迎下载精品名师归纳总结int mainvoidstruct sockaddr_in my_addr。ifsockfd = socketAF_INET,SOCK_STREAM,0 = -1 perrorsocket。exit1 。my_addr.sin_family = AF_INET 。my_addr.sin_port = htonsMYPORT。my_addr.sin_addr.s_addr = INADDR_ANY。bzero&my_addr.sin_zero,8。ifbindsoc

42、kfd,struct sockaddr*&my_addr,sizeofstruct sockaddr = -1 perrorbind 。exit1 。iflistensockfd,BACKLOG = -1 perrorlisten 。exit1。ifpthread_create&accthread,NULL,void *acceptconnect,NULL .= 0 printfCreate thread error.rn 。exit1。可编辑资料 - - - 欢迎下载精品名师归纳总结while1char msgMAXDATASIZE 。scanf%s,msg。ifsendnew_fd,msg,strlenmsg,0 = -1perrorsend。closenew_fd。exit1 。ifstrcmpmsg,exit = 0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁