需求
客户端输入文件名,服务端将对应文件传输给客户端下载
服务端
首先设置端口
创建socket对象等待客户端连接
获取用户输入的文件名
确定返回的文件,将该文件转化成字节数组
将数组写出到通道传输给客户端
package Internet.TransFile;
/**
*@author fengwj
*@version 1.0
* 服务端接收客户端请求的文件名,并将对应文件发送给客户端
*/
import Internet.Utility.StreamUtils;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
//监听窗口
ServerSocket serverSocket = new ServerSocket(9999);
//等待用户连接
System.out.println("服务端等待连接~");
Socket socket = serverSocket.accept();
//获取用户要下载的文件名
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
int len=0;
String downLoadFileName="";
while((len=inputStream.read(b))!=-1){
downLoadFileName+=new String(b,0,len);
}
System.out.println("客户希望下载的文件名"+downLoadFileName);
//确定返回的文件
String resFileName="";
if("tankedazhan".equals(downLoadFileName)){
resFileName="src\\tankedazhan.mp4";
}else{
resFileName="src\\ChaoJiMaLi.mp4";
}
//读取文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(resFileName));
//将文件转化为字节数组
byte[] bytes = StreamUtils.streamToByteArray(bis);
//将数组输出到通道,返回客户端
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
bos.write(bytes);
socket.shutdownOutput();//结束传输
//关闭
bos.close();
bis.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
客户端
接收用户输入,确定要下载的文件名
对接端口,将文件名输出到通道
接收服务端返回的文件
写入磁盘
package Internet.TransFile;
import Internet.Utility.StreamUtils;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
/**
*@author fengwj
*@version 1.0
* 向服务端发送所需要的文件名,下载服务端发送的文件
*/
public class Client {
public static void main(String[] args) throws Exception {
//接收文件名
Scanner scanner = new Scanner(System.in);
System.out.println("请输入下载的文件名");
String dowmLoadFileName = scanner.next();
//发送要下载的文件名
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
//输出到通道
OutputStream outputStream = socket.getOutputStream();
outputStream.write(dowmLoadFileName.getBytes());
socket.shutdownOutput();//结束输出
//接收服务端返回的文件
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
byte[] bytes = StreamUtils.streamToByteArray(bis);
//将文件写入磁盘
String filePath="e:\\"+dowmLoadFileName+".mp4";
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
bos.write(bytes);
//关闭资源
bos.close();
bis.close();
outputStream.close();
socket.close();
System.out.println("客户端下载完毕~");
}
}