使用UDP协议模拟实现FTP服务器/客户端
这是我的课程设计题.
这两天想了想,很多细节上的问题,都有很多不同的解决方案,不好选择,所以这里跟大家讨论讨论.
1.端口的问题
a.使用两个端口(30,31),模拟ftp,31端口接收命令(UDP数据报),30端口传数据(如文件,文件列表...)
为每一个客户启动一个线程(读写文件),这些线程读取和接收的数据都是通过30端口的.
b.使用一个命令接收端口(31),多个数据端口.
客户端连接服务器时,首先发命令给31,服务器执行命令启动一个线程,在这里线程里开一个端口,专门
为此客户端服务(包括命令与数据).
除了第一个命令,其他都是与专用端口通信的.
c.使用nio的非阻塞通信 + 两个端口
d.使用nio的非阻塞通信 + 命令端口,多数据端口
2.数据报校验,重发的问题
如何支数据报进行校验? 是不是在网络传输过程中,数据报里的数据有可能发生改变??
-----------------------------华丽的分割线---------------------------------
(以下是关于重发的)
a.服务器或客户端每收到一个数据报,都向对方回发一个确认数据报(确认数据报只发一次),没发收到确认
包,则认为丢包,重发.
b.超时机制.客户端接收数据,如果t时间内没有收到数据报,则认为丢包,向服务器发数据报请重发.
c.缓存机制.每次收到n个包才执行一次文件写操作,在写之前,对这n个包进行顺序检查,发现丢失了,则请求对方
重发.
3.并发的问题
a.用户a在上传文件f,文件f未上传完成之前,用户b执行dir命令,列出未完成上传的文件.
b.情景同上,不列出未完成上传的文件.
c.如果采用a方案,用户b执行 get f ,要怎么处理?(一个线程在写文件,一个线程同时读文件)
以上都是我想了的方案了,与大家讨论,或者有更好的方案,请不吝赐教.