import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Test7_Client {
/**
* 7、使用TCP协议写一个可以上传文件的服务器和客户端。
* 分析:
* InputStreamReader字符与字节转化的桥梁
* 输出流用PrintStream 更方便
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//获取需要上传的文件路径
File file = getFile();
//连接服务器 建立读写流
Socket socket = new Socket("127.0.0.1",6060);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
//将文件路径 输出 给服务器
ps.println(file.getName());
String result = br.readLine();
if ("文件已经存在!".equals(result)){ //判断服务器上是否已经有了此文件,如已存在则不用上传
System.out.println("文件已经存在,请不要重复上传!");
socket.close();
return;
}
//服务器上不存在此文件,建立输入流
FileInputStream fis = new FileInputStream(file);
byte arr[] = new byte[8192]; //高效传输
int len;
while((len = fis.read()) != -1){
ps.write(arr, 0, len);
}
fis.close(); //关流关连接
socket.close();
}
/**
* 获取上传的文件路径
* @return File
*/
public static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("输入文件路径:");
//判断要上传的文件路径是否存在
while(true){
String line = sc.nextLine();
File file = new File(line);
if(!file.exists()){
System.out.println("文件路径不存在!请重输:");
}else if (file.isDirectory()){
System.out.println("输入的是文件夹路径!请重输:");
}else{
return file;
}
}
}
}
使用TCP协议写一个可以上传文件的服务器和客户端
最新推荐文章于 2024-05-13 02:38:12 发布