课程设计论文-基于linux嵌入式的聊天室系统设计.doc

上传人:b****1 文档编号:188500 上传时间:2022-10-05 格式:DOC 页数:23 大小:445KB
下载 相关 举报
课程设计论文-基于linux嵌入式的聊天室系统设计.doc_第1页
第1页 / 共23页
课程设计论文-基于linux嵌入式的聊天室系统设计.doc_第2页
第2页 / 共23页
课程设计论文-基于linux嵌入式的聊天室系统设计.doc_第3页
第3页 / 共23页
课程设计论文-基于linux嵌入式的聊天室系统设计.doc_第4页
第4页 / 共23页
课程设计论文-基于linux嵌入式的聊天室系统设计.doc_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

课程设计论文-基于linux嵌入式的聊天室系统设计.doc

《课程设计论文-基于linux嵌入式的聊天室系统设计.doc》由会员分享,可在线阅读,更多相关《课程设计论文-基于linux嵌入式的聊天室系统设计.doc(23页珍藏版)》请在冰豆网上搜索。

课程设计论文-基于linux嵌入式的聊天室系统设计.doc

专业方向课程设计任务书

(嵌入式方向)

题目:

基于linux嵌入式的聊天室系统设计

初始条件:

1.软帝嵌入式ARM9开发教学设备;

2.PC机及相关应用软件;

要求完成的主要任务:

1.了解TCP方面socket编程。

2.实现客户端与服务器端的聊天功能。

3.撰写课程设计说明书。

4.课程设计说明书要求:

引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、体会及总结、参考文献、源程序。

说明书使用A4纸打印或手写。

序号

阶段内容

所需时间(周)

1

下达课程设计任务书和日程安排,根据任务书查找资料,了解触摸屏工作原理;

第13周

2

熟悉ARM的C语言程序设计;

第14周

3

程序的编写和调试;结果分析整理、撰写课程设计报告,验收和答辩。

第15.16周

合计

4周

指导教师签名:

年月日

摘要

本系统建立在嵌入式系统网络平台上,系统的设计使用了面向对象技术和面向对象的设计原则。

系统采用C/S与B/S结合的结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。

使用嵌入式C++语言编写,开发工具采用linux下的Qt环境。

服务器设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。

大大增强了程序对服务器资源的利用。

在Linux下编写并调试服务器端程序和客户端程序,实现了客户、服务器之间的连接和通信。

关键字:

Linux;Qt;TCP/IP;多人聊天

目录

目录 3

第一章总体方案设计 4

1.1系统实现原理 4

1.2.总体方案设计 4

1.2.1服务器流程图 5

1.2.2客户端流程图 6

第二章软件功能实现 7

2.1相关技术说明 7

2.1.1 网络套接字(socket) 7

2.1.2 C/S结构 8

2.1.3 多线程 9

2.2聊天室系统功能实现 9

2.2.1 Linux提供的有关Socket的系统调用 9

2.2.2 TCP通信实现 10

第三章运行结果 11

心得体会 13

参考文献 14

第一章总体方案设计

1.1系统实现原理

聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。

因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:

在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。

因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。

图1-1系统实现原理

1.2总体方案设计

服务器的主要任务是侦听建立连接的请求,这是由我们创建的特定服务器对象完成的。

而客户机的任务是试着与一台服务器建立连接,这是由我们创建的特定客户机对象完成的。

一旦连接建好,那么无论在服务器端还是客户机端,连接只是魔术般地变成了一个IO数据流对象。

从这时开始,我们可以象读写一个普通的文件那样对待连接。

图1-3服务器和客户机的连接

1.2.1服务器流程图

2008-07-2115:

51上传

下载次数:

34

每个客户端开启两个进程,开启两个TCPSocket通信。

一个进程响应用户的操作,它还把用户输入的聊天信息发送给服务器;另外一个进程的功能是接收信息,单独开辟一个接收信息的原因是因为中的进程设计到输入,可能会导致接收报文的阻塞服务器端开启。

刚开始只有一个父进程,当有一个新的连接时,则会开启一个新的进程,用这个开启的新的进程来实现“接收对应客户端信息,分析解码后,再发送重组报文信息给其他客户端”。

1.2.2客户端流程图

2008-07-2115:

51上传

下载次数:

34

端口通知报文,等客户端连接上服务器之后,服务器会新建一个进程,使用一个新的Socket来和客户端通信,需要发送一个报文来告诉客户端新的端口号。

聊天消息报文,A对B发送消息,组装成报文,供服务器分析,然后广播给其他客户用户列表更新,当用户状态发生变化时,服务器会广播此报文,来通知所有客户。

第二章软件功能实现

本多人聊天系统设计采用linux环境下的QT编程,利用C/S结构来实现聊天界面的功能,在通信方面主要是通过Socket网络套接字多线程技术来实现。

2.1相关技术说明

本聊天室程序在linux下,采用C语言实现,结构为Client/Server结构;服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端;服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避免数据冲撞;需按以下格式调用客户端程序:

client.exe服务端主机IP端口号(本),用户名(在聊天室中显示的用户名)。

2.1.1网络套接字(socket)

Socket接口上TCP/IP网络应用程序接口(API),它提供了许多函数和例程,程序员可以使用它们来开发TCP/IP网络应用程序。

使用Socket接口进行网络通信的过程如图所示,简要步骤如下:

(1)建立一个Socket.

(2)按要求配置socket,将socket连接到远程主机或给socket指定以各本地协议端口。

(3)按要求通过socket发送和接受数据。

(4)关闭此socket。

这是通过Socket实现点对点通信需要掌握的4个编程要点。

TCP是传输控制协议的简称,它是提供一条全双工的、可靠的信道。

TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。

TCP不提供广播和多播服务。

由于TCP要提供可靠的、面向连接的运输服务,所以不可避免地增加了许多系统开销,比如确认、流量控制、计时器以及连接管理等都需要占用许多系统的时空资源。

两个计算机之间如果使用TCP通信,其连接过程需要三次握手实现,如实验图2-1所示。

图2-1用三次握手建立TCP连接

对于两个计算机之间连接的释放过程也需要类似的3次握手的互相确认的过程,如实验图2-2所示。

图2-2TCP连接的释放过程

2.1.2网络套接字(socket)

在C/S结构中,多个相互通信的计算机都作为客户端,与网络服务器进行连接,并通过服务器进行信息的传递。

所以多个客户端之间的通信就变为了客户端与服务端的通信。

所以,采用客户/服务器模型进行网络聊天需要分别编写服务器端和客户端的程序,服务器和客户端之间相互通信的同步关系和各自的程序流程如实验图1-3所示。

图2-3Socket通信流程图

2.1.3 多线程

上述点对点通信的实现知识完成了主机进程与服务器进程之间的连接,建立连接的进程之间是一对一的联系,即主机的一个进程与服务器的一个进程之间建立的连接。

而每个进程进行通信的环节都包括了发送信息和接口信息两个任务,这两个任务通过一个端口地址发送和接收。

在网络通信中,端口地址是以进程为单位进程分配的,而一个进程与外界的消息发送与接收必须通过分配给它的同一个端口进行。

因此,不能通过创建进程方式来解决上诉问题,因为两个进程会分别对应两个不同的端口,而发送和接收必须使用同一端口。

2.2聊天室系统功能实现

2.2.1Linux提供的有关Socket的系统调用

(1)Socket()

作用:

socket函数为客户机或服务器创建一个sokcet

格式:

intsocket(intfamily,inttype,intprotocol);

(2)bind()

格式:

intbind(intsockfd,structsockaddr*addr,intaddrlen);

参数说明:

Sockfd:

socket的文件描述符号。

Sockaddr:

表示名字所用的一个数据结构,用来保存地址(包括IP地址和端口)

Addrlen:

设置结构大小长度。

(3)listen()

格式:

intlisten(intsockfd,intbacklog);

作用:

监听连接信号,和accepted函数合同。

参数说明:

Sockfd:

表示socket调用返回的文件描述符。

Backlog:

表示接入队列允许的连接数目,大多数系统允许20个,也可以子定义5~10个。

(4)accept()

格式:

Intaccept(intsockfd,void*addr,int*addrlen);

作用:

与listen函数合用,监听信息、接收客户端请求。

参数说明:

Sockfd:

表示socket的文件描述符。

Addr:

表示指向局部的数据结构structsockaddr-in的指针。

Addrlen:

表示地址的长度。

(5)connect()

格式:

intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);

作用:

在面向连接的系统中客户及连接服务器时使用,connect必须在bind后使用。

参数作用:

Sockfd:

表示socket的文件描述符。

Serv-addr:

表示村访目的端口和ip地址(套接字)的数据结构。

(6)send()和recv()

格式1:

Intsend(intsockfd,constvod*msg,intlen,intflags);

功能:

发送信息。

格式2:

Intrecv(intsockfd,void*buf,intlen,usignedintflags);

作用:

用于流式socket、数据报socket内部之间的通信。

(7)close()和shutdown()

格式:

Close(intsockfd)

Intshutdown(intsockfd,inthow);

2.2.2TCP通信实现

(1)监听连接

利用socket、bind、listen建立连接,步骤是:

1)先用socket函数初始化socket,创建新的sockfd。

Sockfd=socket(AF_INT,SOCK_STREAM,0)

2)此步骤涉及到IP地址及其处理过程。

参数说明:

inet_addr函数INADDR_ANY

该函数把由小数点分开的十进制IP地址转为unsingedlong类型,而在实验中所使用的为INADDR_ANY,使用利用自已的IP地址自动填充。

a)利用bind函数绑定端口和IP地址。

My_addr.sin_family=AF_INET;/*将地址族类型设定好*/

My_addr.sin_port=htons(MYPORT;/*将端口给其赋值*/

My_addr.sin_addr.s_addr=INADDR_ANY;/*用连接地址自动填充ip*/

Bind(sockfd,(stuc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1