搜索
您的当前位置:首页正文

Linux下聊天程序设计说明书

来源:好走旅游网


Linux下聊天应用设计说明(draft) PMDev文档履历日期6/26/2014版本Draft版作者韩 鹏范 鑫胡 亮龚成辉说明初版作成UI/UE Design分工明细姓 名韩 鹏(组长)任务说明负责组织开展review;负责客户端程序的设计、coding与测试;参与服务器程序的设计、coding与测试;参与设计文档的编写。负责设计文档的编写;负责服务器程序的设计;参与客户端程序的设计、coding与测试;参与服务器程序的测试。负责服务器程序的coding与测试;参与服务器程序的设计;参与客户端程序的设计;参与设计文档的编写。负责服务器程序的设计;参与服务器程序的coding与测试;参与客户端程序的设计;参与设计文档的编写。范 鑫胡 亮龚成辉1

目录

目录

目录..............................................................................................................21.Overview..................................................................................................32.Architecture..............................................................................................33.Detail Process Sequence..........................................................................7

2

1.Overview

本次设计是在Linux环境下实现基于服务器的两个客户端之间进行聊天和文件传输功能。

通信实现:若传输文件需在文件名前加‘$‘ ,如:$example.txt;若发送消息可直

接编写消息内容,但消息的第一个字符不能为’$‘。

2.Architecture

1.聊天程序应用主要有两大模块:A 客户端:

客户端流程图如下图:

3

工作流程是:

(1) 客户端程序首先通过服务器域名获得服务器的IP地址;(2) 然后创建一个socket;

(3) 调用connect函数与服务器建立连接;(4) 连接成功后判断是子进程还是父进程;

(5) 子进程用来接收数据,父进程用来发送数据;(6) 收发数据之前要判断此数据是否为文件;

(7) 如果是文件则分批读取文件,直到文件发(收)完成;(8) 如果不是文件则按即时消息传递;

(9) 判断是否有客户提出退出申请或者具备退出条件,如果不退出继 续循环;

(10)最后关闭socket;

B 服务器端:

服务器端流程图如下图:

4

工作流程是:

(1) 首先调用socket函数创建一个套接字;

(2) 然后调用bind函数将其与本机地址及端口号绑定;(3) 然后调用 listen在相应的socket上监听;

(4) 当accept接收到连接服务请求时,将生成一个新的socket, 这个;

socket代表了客户端与服务器之间的连接;(5) 再用fork创建子进程,用于接收和发送数据;

(6) 父进程接收客户端1数据发送给客户端2,子进程反之;

(7) 如果是聊天记录则发送给两个客户端,以便于保存聊天记录,如 果是文

件则只发给另一个客户端;

(8) 读取到客户端的请求后由send函数向客户端发送数据;(9) 最后由close关闭该socket。

2.客户端主要函数:

int sendisfile(char *buf)

功 能:判断用户输入的信息是否是要发送一个文件 参 数: buf指向所提取的用户输入信息的首地址 返回值:若是发送一个文件返回 “1”,否则返回“0”

int recvisfile(char *buf)

功 能:判断另一个客户端传过来的是否是文件名 参 数:buf指向传输过来的数据的首地址。 返回值:若是文件返回“1”,否则返回“0”

void sendfile(char *MesOrFil, int clientfd)

功 能:将要发送的文件,发送给服务器,让服务器转发给另一个客户端 参 数:MesOrFil指向要发送的文件名的首地址 clientfd与服务器连接的套接字 返回值:void

int sendmes(char *buf, char *MesOrFil, int clientfd) 功 能:发送一个聊天消息给服务器让服务器进行转发 参 数:buf指向本用户的昵称的首地址

MesOrFil指向要发送的聊天消息的首地址 clientfd与服务器连接的套接字 返回值:返回所发送消息的字节数

5

void recivefile(char *buf, int clientfd) 功 能:接收文件

参 数:buf指向接收文件名的首地址 clientfd与服务器连接的套接字 返回值:void

void savemes(char *buf, int recvbytes, char *nicheng) 功 能:保存聊天记录

参 数:buf指向接收的消息的首地址 recvbytes接收的消息的长度 nicheng用户的昵称 返回值:void

int main(int argc, char *argv[]) 功 能:设置套接字并连接到服务器 创建一个子进程用来接收来自服务器端的数据 父进程用来向服务器发送数据

参 数:需要在终端运行时给出服务器的IP地址、端口号和用户的昵称 返回值:0

3.服务器主要功能块: pid = fork();

if(pid>0) {

接收客户端0消息

如果接收的第一个字符不为'$',获取当前时间,发送消息和当前时间 给客户端0和客户端1

如果接收的第一个字符为'$',发送消息给客户端1 }

If(pid==0) {

接收客户端1消息

如果接收的第一个字符不为'$',获取当前时间,发送消息和当前时间 给客户端0和客户端1

如果接收的第一个字符为'$',发送消息给客户端0 }

6

3.Detail Process Sequence

总体结构图:

客户端通过connect()函数向服务器发起连接请求,客户端则通过accept()来响应客户端的请求,数据的传输是通过send()和recv()两个函数之间传递,但是在客户端接收数据时会判断此数据是否是文件,如果不是文件则需要服务器往两个客户端都发送聊天内容以便保存记录,如果是文件的话只需要发送给一个客户端。

7

因篇幅问题不能全部显示,请点此查看更多更全内容

Top