欢迎来到天天文库
浏览记录
ID:53748860
大小:274.53 KB
页数:6页
时间:2020-04-22
《飞鸽代码分析.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、飞鸽传书代码分析:一:main函数中创造线程处理数据和调用函数主要线程:processor处理接收的UDP包Receiver接受UDP包Interacter用户输入(人机交换)Cleaner调用destroyer()函数清理数据调用函数:返回一些本地信息相关数据结构的初始化与清理初始化UDP和TCP信号量的初始化用户登录线程的属性线程等待退出主要功能:通过几个线程处理通信过程中的信息,通过accept()函数等待并接受连接请求,建立线程sendData发送文件或文件夹。二:初始化UDP和TCPUDPforMsg,TCPforFil
2、e.套接字,协议地址信息,广播,绑定IP与端口,监听。三:登录与注销标志用户登录协议地址信息转换地址写入到数组发送信息1.发送信息(UDP包):生成信息,将要发送的信息(文件)写到BUF中,发送出去(sendto)2.生成信息:将文件的信息(序号、名字、大小…)放入到一个结构体中进行操作。获得文件名的路径,对文件名(filename)、文件类型(filetype)(?)、编码转换,等一些操作。getFileName()addColon()流程图为:四:线程Receiver接受UDP包接收(recvfrom)信息,解析接受到的字符串
3、(msgParser),将协议地址放入结构体链表中。信号与互斥锁处理。五:线程Processor处理接收的UDP包处理链表中的信息,读取到命令字,做出相关的信息回应。发送文件时设置互斥锁:getFMutex(文件的);通报在线时处理链表(userlist),设置互斥锁(usrMutex);停止传输文件时处理链表(userlist),设置互斥锁(sandMutex);六:线程Interacter用户输入(人机交换)字符串处理,去掉开头结尾空白字符。资源互斥保护,在listUsers链表中列出。通过用户输入,比较判断关键字,执行用户指
4、令。七:线程Cleaner调用destroyer()函数清理数据数据清理,调用deGsNode函数相当与删除链表的一个节点,发送和接收文件列表、接受消息列表,在删除各链表时都需要设置相对应的互斥锁。八:聊天消息的发送与接收信息显示到用户链表中,用户可选择聊天对象发送信息以及发送文件。在发送信息过程中需要传送检查,需要对方返回确认信息(通过命令字实现),发送的信息放入到临时输入区,通过一个标志检测信息包是否已发送。通过线程receiver和线程processor对接收消息的处理。流程图为:九:文件或文件夹发送与接收通过accept(
5、)函数等待并接受连接请求,建立线程sendData发送文件或文件夹。在传送文件时接受TCP传输请求,对文件名做处理后,将其写入套接字中。在发送文件夹时,需要遍历要发送的文件夹,在sendDir函数中对文件夹的处理,再利用回调函数将其发送出去。传输文件时以下信息将被添加到消息内容之后(包括格式):文件序号:文件名:大小(单位:字节):最后修改时间:文件属性[:附加属性=val1[,val2…][:附加信息=…]]:a:文件序号…(文件大小、最后修改时间和文件属性为十六进制数,如果文件名中包含’:’则使用“::”代替)。选择要传输的
6、文件->在用户列表列出(包括文件的属性)->用户选择对链表处理(?)并同时发送信息接收文件,在用户列表中选择要接收的文件和文件夹,建立套接字与发送方建立连接,接收文件并回复信息,接收文件夹时需要分析文件夹的头部(名字、大小、类型)以识别是普通文件、还是文件夹、还是要返回上一级目录,并指定路径。流程图为:
此文档下载收益归作者所有