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下网络编程,多线程编程及线程间通信(主要用到信号量与互斥锁)。但加密解密那块没有完成,程序结构不是很好,界面做得太差。有空应该看看设计模式.

界面截图(界面比较垃圾):

附:

飞鸽协议: http://bbs.chinaunix.net/viewthread.php?tid=1015775

posted on 2011-03-15 21:57 周强 阅读(1240) 评论(0)  编辑 收藏 引用 所属分类: linux 、网络编程

飞鸽传书linux运行,Linux下飞鸽传书实现相关推荐

  1. 飞鸽传书linux运行,Linux下如何安装IPtux飞鸽传书

    习惯了在Windows系统中使用飞鸽传书的童鞋们,对于突然在使用Linux时在局域网下传输文件.即时通讯等,可能突然感觉束手无策. 下面就针对Linux下安装iptux(飞鸽传书)进行安装和使用的说明 ...

  2. asf如何在linux运行,linux环境下使用mono运行asf挂卡

    杰瑞包大好评啊,但是带来的后果就是挂卡挂不完了.然而手里的服务器全是linux环境的并不支持C#写的ASF,所以用mono f**k之. Ubuntu篇 接下来介绍如何安装mono,以Ubuntu 1 ...

  3. asf如何在linux运行,Linux下使用ASF工具Steam挂卡的配置使用

    Linux下使用ASF工具 Steam 挂卡的配置使用 简介 既然你都费钱买了游玩,为甚么还要花时间玩呢?这款工具便可以不用下载游玩,主动挂卡,是Steam回血渠道之一.(慈悲包) 1.部署 .Net ...

  4. 单进程程序怎样在linux运行,linux下C程序:运行单个实例

    对于很多服务来说,在同一个服务器上只能运行一个实例,那么通过什么方法来保证程序同一时刻只有一个实例运行呢?通过编写shell脚本来管理程序的启动.停止是个不错的方法.在启动时,shell脚本会创建进程 ...

  5. pydev工程linux运行,Linux平台下Python的安装及IDE开发环境搭建

    转自http://blog.csdn.net/guoxiaojie_415/article/details/48108319 1.Python安装 Python有2.X和3.X两个版本,由于2.X的版 ...

  6. jperf linux运行,Linux网络性能评估工具iperf

    Iperf介绍 iperf是一个基于TCP/IP和UDP/IP的网络性能测试工具,用于检测网络带宽使用率和网络质量,能测试最大TCP和UDP带宽性能,可以报告带宽.网络延迟抖动.数据包丢失率和最大传输 ...

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

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

  8. 1连接远程linux,2配置linux,3在linux运行pyhon

    前两天有大神帮我部署Linux,据说可以连接到自己电脑上,我对于那些东西,自己一点也不了解,还好有大神帮我步骤 一开始的时候,大神在他网站帮我加载了很多的文件 然后我的Linux变得很好看 然后分别帮 ...

  9. 飞鸽传书如何在VMware下进行通信

    飞鸽传书如何在VMware下进行通信?VMware Workstation是一款功能强大的虚拟机软件,可以使你在一台机器上同时运行二个或更多Windows.DOS.LINUX系统,并进行开发.测试.部 ...

  10. linux实训项目——飞鸽(一)

    目前完成UDP广播上线.用户间对话功能. 目录 目录 前言 一.基础知识 二."飞鸽"运行流程 1.用户运行程序后先设置用户名,即上线后别人看到的名字. 2.上线后进行UDP广播, ...

最新文章

  1. 最难忘的一天----一周年记
  2. 与MYSQL的零距离接触(数据类型) 慕课网
  3. Java项目导出源代码jar包在Eclipse中查看中文注释乱码的问题
  4. pthread_join和pthread_detach详解
  5. c#和c++的opencv位图数据参数互换问题解决方法
  6. tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行 程序的名称。
  7. P4389 付公主的背包(生成函数,多项式exp)
  8. 使用Span T 提高C#代码的性能
  9. C语言-排序-希尔排序
  10. php oracle 存储过程 返回值,PHP 调用 Oracle 存储过程 之 查询
  11. 目标检测网络 -- FasterRCNN
  12. 第一台电子计算机乌拉尔,2018网易爱乐之战题目答案大全一览
  13. 【渝粤教育】广东开放大学 动画运动规律 形成性考核 (25)
  14. SlideLive网站:提供PPT模板在线播放和免费下载的功能
  15. ABP Vnext 扩展微信小程序授权登录
  16. mqtt publish 中文
  17. 解决 “您必须首先安装.NETFramework的以下版本“
  18. html手机端自适应头部,html5写自适应头部
  19. 2012.3积累点滴
  20. vscode的颜色设置(护眼模式)

热门文章

  1. Android第四次作业
  2. 基于单片机的数字频率计设计
  3. 《计算机网络教程》(微课版 第五版)复习补充题
  4. 第三次科技革命与计算机网络,第三次科技革命
  5. 几张图,简单弄懂pcb生产工艺流程!
  6. 新颖的计算机科学与技术毕业设计题目
  7. dw网页制作教程百度云盘_dreamweaver制作网页详细步骤(设计网站首页)
  8. ESP32驱动AD7705
  9. Android 准确过滤(禁止) Emoji表情
  10. 回溯算法符号三角形java_算法设计与分析——符号三角形问题(回溯法)