题目:
要求实现一个文件服务器:
服务端可以将服务端某个目录(该目录下只有标准文件)对外共享,客户端连接服务器之后,首先需要在客户端显示一个可以下载的文件列表;然后客户端发送需要下载的文件编号,将服务端中指定编号的文件下载到本地
一个工具类
功能:根据提供的输入输出流实现字节的读写
package com.softeem.lesson39.example;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TransferUtils {
public static void transfer(InputStream in,OutputStream out) throws IOException {
try {
byte[] b = new byte[1024];
int len = 0;
while((len= in.read(b))!=-1) {
out.write(b, 0, len);
}
// byte[] b =new byte[in.available()];
// out.write(b);
}finally {
if(out!=null)out.close();
if(in!=null)in.close();
}
}
}
服务端(使用线程)
首先建立服务器并且确定端口号 等待客户端的连接
连接后有三步:
1.基于Map集合,将文件的编号作为键,文件作为值,通过IO流发送给客户端,然后等待客户端的回复
2.接受到客户端的回复编号,找到需要发送的文件,
3.写入到SOCKET中等待客户端的读取
package com.softeem.lesson39.example;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;