Linux下飞鸽传书项目设计书,Linux 下飞鸽传书设计实现

Linux 下飞鸽传书设计实现

1、系统功能

根据飞鸽传书协议在 linux 下实现飞鸽传输程序,并且与 windows 下飞鸽兼容。具体功能模块包括用户上线,下线,刷新查看在线用户,收发消息,传送文件/文件夹功能模块。

2、具体实现

2、1 关键数据结构

/*命令的结构*/

typedef struct _command

{

int version;/*命令的版本*/

int seq;/*包编号*/

char srcName[100];/*发送者姓名*/

char srcHost[100];/*发送者主机名*/

int flag;/*命令*/

char addtion[100];/*附加字段*/

}command;

/*在线用户信息*/

typedef struct _userInfo

{

char name[MAXLINE]; /*姓名*/

char host[MAXLINE]; /*主机名*/

char group[MAXLINE]; /*所在的组名*/

struct sockaddr_in addr; /*地址信息*/

struct _userInfo next; /*链表中下一个*/

}userInfo;

/*在线用户列表*/

typedef struct _uList

{

userInfo *userListHead; /*链表头*/

userInfo userListTail; /*链表尾*/

}uList;

/*消息队列*/

typedef struct _mesList

{

command *mesHead;

command *mesTail;

}mesList;

2、2 程序主要结构

本程序主要采用多线程结构,分为 receive(接收消息), process(处理收到的消息), sendData(发送文件) 三个子线程。线程间通信互斥锁与 Posix 信号量进行通信。

2、3 函数接口

(1) /*从文件描述符fd中读取count个字符存入buf中*/

ssize_t readn(int fd,void *buf,size_t count);

(2) /*将buf所指向的存储区中的len个字符吸入文件描述符fd中*/

ssize_t writen(int fd,char *buf,int len);

(3) /*用于字符串转换,网络传输中用gb2312编码,linux下gtk用utf-8编码,需要进行转换*/

int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen);

(4) /*在用户链表中加入新用户信息,加入成功返回1,否则返回0,使用userInfoMutex进行线程间通信控制*/

int pushBack(uList *list,userInfo user);

(5) /*在用户链表中删除指定地址信息的用户,删除成功后返回1,否则返回0,使用userInfoMutex进行线程间控制*/

int delUser(uList *list, struct sockaddr_in addr);

(6) /*判断该用户是否已经存在,已经存在则返回1,否则返回0,使用userInfoMutex进行线程间控制*/

int isExist(uList *list,struct sockaddr_in addr);

(7)清空用户链表,释放空间,用于用户退出和用户刷新时释放空间,使用userInfoMutex进行线程间控制*/

int destroyList(uList *list);

(8)/*创建命令字,com为要返回的命令字,flag 为消息标志,addtion 为附加标志*/

void createCmd(command & com,int flag,char addtion[])

(9)/*发送消息,com为要发送的消息,servaddr为要发送的地址,attach为文件附件信息*/

void sendCmd(command com, struct sockaddr_in servaddr,char attach[]);

(10) /*把收到的消息加入到消息队列中*/

void addMes(mesList *mHead,command cmd);

(11) /*把消息队列中头部的节点消息提取出来用于处理*/

int delMes(mesList *mHead,command *cmd);

(12)/*初始化操作,飞鸽登录时初始化消息链表,用户链表,信号量,套接字信息*/

void init();

(13)/*登录操作,发送用户上线消息*/

void login();

(14)/*解析收到的消息命令,提取各个字段*/

int analysisCmd(command *cmd,char *buf);

(15) /*接收消息线程处理函数,将收到的消息加入消息队列中,通过信号量waitNoFull和waitNoEmpty和消息处理线程进行通信。消息队列用mesMutex与其他线程进行通信,保证消息队列的正确性*/

void *receive(void *arg);

(16)/*gtk界面中显示在线用户信息*/

void showUser(uList *list);

(17)/*在gtk界面中显示消息*/

void showMessage(char *message);

(18)/*显示收到的信息*/

void showRecvMessage(char *host,char *message);

(19)/*分析文件的信息,提取有用的字段*/

void fileAnalysis(char *recv,int *fNum,char *fName,int *fSize,int *fTime,int *fType);

(20) /*保存收到的单个文件,saveName为保存的文件名*/

void saveSignalFile(char *saveName);

(21)/*分析目录附件,获得目录文件的文件名,文件大小,文件类型*/

void getDirInfo(char *recv,char *fName,int *fSize,int *fType);

(22) /*保存目录,saveName为要保存的目录*/

void saveDir(char *saveName);

(23)/*保存文件,recvType=1为保存文件,recvType=2为保存的目录,使用fileMutex来设置互斥性*/

void saveFile();

(24)/*收到单个文件*/

void receiveSignalFile(char *recvFileName);

(25)/*收到单个目录*/

void receiveDir(char *recvDirName);

(26)/*接收文件*/

void receiveFile(command cmd);

(27)/*信号处理线程,从消息队列中取出消息进行处理*/

void *process(void *arg);

(28)/*发送消息*/

int sendMes();

(29) /*将文件名进行转换*/

char *transName(char *fileName);

(30)/*发送文件*/

void sendFile();

(31)/*发送文件夹*/

void sendDir();

(32)/*用户点击刷新,刷新在线用户*/

void refresh();

(33) /*用户退出*/

void quit();

(34)/*传输文件夹数据,递归函数*/

void transferDir(int fd,char *dir);

(35)/*监听TCP套接口,发送文件与文件夹线程*/

void *sendData(void *arg);

(36)/*创建菜单*/

static void create_popup_menu(GtkWidget *menu,GtkWidget *view);

(37)/*右击选中treeview,显示传送文件与文件夹菜单*/

static gboolean showTreeView(GtkWidget *eventBox,GdkEventButton *event,GtkWidget *menu);

(38)/*选择要发送的文件 */

static void selectFile();

(39)/*选择要发送的文件夹*/

static void selectDir();

(40)/*选择要保存的文件名或文件夹名*/

static void selectSaveFile();

3、总结

实现了linux下飞鸽传书的基本功能,并且能与window下飞鸽进行通信,传文件。熟悉了linux下网络编程,多线程编程及线程间通信(主要用到信号量与互斥锁)。但加密解密那块没有完成,程序结构不是很好,界面做得太差。有空应该看看设计模式.

https://www.cnblogs.com/hnrainll/category/297419.html

Linux飞鸽传书是一种基于Linux系统的即时通讯工具,它可以在同一局域网内进行文件传输、文字聊天、远程控制等操作。如果你想进行Linux飞鸽传书项目实训,可以按照以下步骤进行: 1. 确定项目目标:你需要明确你的实训目标,是想学习Linux系统的基础知识还是想深入了解即时通讯软件的设计实现? 2. 环境搭建:为了进行Linux飞鸽传书的实训,你需要先搭建好Linux系统。你可以选择在虚拟机中安装Linux系统,或者直接安装在实体机上。安装好系统后,你需要配置好网络环境,确保可以进行局域网内的通信。 3. 获取代码:你可以通过Github等代码托管平台获取Linux飞鸽传书的代码。在获取代码后,你需要进行代码的编译、安装等操作,确保可以正常运行。 4. 进行实训:在安装配置好Linux飞鸽传书后,你可以进行实际的使用和测试。你可以尝试进行文件传输、文字聊天、远程控制等操作,以深入了解Linux飞鸽传书的功能和实现原理。 5. 总结反思:在实训结束后,你需要对整个实训过程进行总结和反思。你可以回顾自己的学习过程,发现问题并进行改进,同时也可以分享你的经验和心得,帮助他人更好地进行实训。 总之,Linux飞鸽传书项目实训需要你具备一定的Linux基础知识和编程能力,同时也需要你有一定的实践经验。通过实训,你可以深入了解即时通讯软件的设计实现,提高自己的技能水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值