P2P模式文件传输网络应用的开发


_

我设计的p2p系统包括用户登录模块、注册资源模块、下载资源模块;

服务端维护用户和资源信息,包括两张表(如下),其中src_name保存的是资源在注册用户机器上的绝对路径;

User

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| ip    | varchar(20) | NO   | PRI | NULL    |       |

| port  | varchar(10) | YES  |     | NULL    |       |

| stat  | varchar(3)  | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

Src

+----------+--------------+------+-----+---------+-------+

| Field    | Type         | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| ip       | varchar(20)  | YES  |     | NULL    |       |

| src_name | varchar(50)  | YES  |     | NULL    |       |

| src_path | varchar(300) | YES  |     | NULL    |       |

+----------+--------------+------+-----+---------+-------+

客户端拥有用户图形界面,用户登录时需要填写服务器IP、服务器PORT和本机监听PORT;注册资源时需要选择文件、填写资源名称;下载文件时需要填写查询的资源名称和文件监听PORT。

客户端-->服务器的协议形式:IP(客户自己的)+PORT(客户自己的)+act+src_name+src_path;其中act包括:login/logoff/upload/download/query;

服务器-->客户端的协议形式:resp – ip(其他结点的)+port(其他结点的)+src_name+src_path - …… - …… - ;其中resp为服务器返回给客户端的状态码,以便于客户端根据状态码进行处理和显示,包括:login_ok/logoff_ok/upload_ok/query_result/query_null/p2p;

PàP之间的协议形式:resp – ip(客户自己的) – port(客户自己的文件监听端口) – src_name – src_path;其中resp为p2p;

使用流程:用户输入服务器IP、服务器PORT和本机监听PORT后,点击上线按钮(有默认值),如果信息不完全或者连接有问题会弹出警示框;点击上线按钮后,其他功能模块的按钮才可以使用,即不再显示灰色,服务器IP、服务器PORT和本机监听PORT三个文本框不可编辑;

用户点击浏览,会弹出文件选择框,选择要上传的文件,确定后,文本框中显示出选中文件的路径和文件名,填写资源命名,如果为空弹出警示框;

如果用户希望下载资源,则在下载资源模块中输入资源名称,点击查询,如果有资源,则显示在下面的列表框中,用户选中希望下载的资源,再填写文件监听PORT,点击下载,会弹出文件夹选择框,确认后,开始下载,下载完成会提示用户,如果下载有问题,也会弹出相应警示框,如果没有资源,则列表框为空,并弹出警示框,告知用户无资源。

用户点击下线按钮后,其他可用的按钮变为不可用,除了上线按钮,并且服务器IP、服务器PORT和本机监听PORT三个文本框可编辑。

 

 


 

1.       文件类型

我发现java project编写socket网络文件传输,只要以txt文本存储都正常,而其他类型就会丢数据,导致下载的文件不完整;于是我想到了一个办法:将其他类型的文件作为txt类型下载下来,然后再进行类型转换成原有类型,删掉用于转换的txt临时文件;因为服务器已经反馈给客户端文件的绝对路径和文件名了,所以客户端可以判断文件类型,是否需要进行格式转换和转换为何种类型。

2.       java写界面太麻烦

因为大二的时候用过socket编程,所以就在原来工程的基础上进行改动,改动很大,但是为了有原型可以参照,便还是使用java编写图形界面,但是确实很麻烦。

3.       用户非正常退出

这个问题目前没有解决,只提供了点击下线按钮,正常下线功能,原理是删除user表中的IP,使其他用户看不到该用户的资源。

4.       用户标识和资源存放问题

因为IP并不是和每台机器是一对一关系,所以用IP作为用户标识,并不是很合理;而且我实现的服务器维护的是资源在用户机器上的绝对路径,并没有考虑好如何能唯一标识一台机器;如果把资源上传到服务器,会增大服务器的负担,这样也不是p2p形式了;现在这种情况就是说,如果用户机器的IP改变,用户再登录系统,之前上传的资源就全部作废,除非使用原来的IP,而且绝对路径还不能变,会造成很大的局限性;所以这个部分在用户体验上还有很大的问题。

 5.还有很重要的一条:各种流啊socket啥的,没用了记得close…否则会崩:被占用…

 

最后代码不传了,我怕别人用着用着就崩了,还是本着优生优育的原则吧,工程名p2p_exp4,eclipse打开,mark一下,有心情再改改吧……不过注定也是个有进步的豆腐渣工程……


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值