您的位置:首页 > 理论基础 > 计算机网络

Test_Java_网络编程(模拟客户端向服务器上传文件)

2017-09-06 17:14 585 查看
需求:使用Java程序创建两个类,分别为UpdateClient和UpdateServer类来模拟客户端向服务器上传文件(因为没有服务器,只能本机传给自己)

提示输入要上传的文件路径,验证路径是否在以及是否是文件夹

发送文件名到服务器

建立多线程的服务器

读取文件名

判断文件是否存在,将结果发回客户端

定义FileOutputStream,从网络读取数据,存储到本地

Test2_UpdateClient.java

package com.soar.test;

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.net.UnknownHostException;
import java.util.Scanner;

public class Test2_UpdateClient {

public static void main(String[] args) throws UnknownHostException, IOException {
//1.提示输入要上传的文件路径,验证路径是否穿在以及是否是文件夹
File file = getFile();
//2.发送文件名到服务器
Socket socket = new Socket("127.0.0.1",12345);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println();
//6.接收结果,如果存在给予提示,程序直接退出
String result = br.readLine();          //读取存在或者不存在的结果
if("服务器已经存在该文件".equals(result)){
System.out.println("您上传的文件已经存在,请不要重复上传");
socket.close();
return;
}
//7.如果不存在,定义FileInputStream读取文件,写出到网络
FileInputStream fis = new FileInputStream(file);
byte[] arr = new byte[8192];
int len;

while((len = fis.read(arr))!= -1){
ps.write(arr,0,len);
}
fis.close();
socket.close();
}

private 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;
}
}
}

}


Test2_UpdateServer.java

package com.soar.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Test2_UpdateServer {

public static void main(String[] args) throws IOException {
//3.建立多线程的服务器
ServerSocket server = new ServerSocket(12345);
System.out.println("服务器启动,绑定12345端口号");

//4.读取文件名
while(true){
final Socket socket = server.accept();      //接受请求

new Thread(){
public void run(){
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
String fileName = br.readLine();

//5.判断文件是否存在,将结果发回客户端
File dir = new File("update");
dir.mkdir();                            //创建文件夹
File file = new File(dir,fileName);     //封装成File对象

if(file.exists()){                      //如果服务器已经存在这个文件
ps.println("存在");       //将存在写给客户端
socket.close();                     //关闭socket
return;
}else{
ps.println("不存在");
}
//8.定义FileOutputStream,从网络读取数据,存储到本地
FileOutputStream fos = new FileOutputStream(file);
byte[] arr = new byte[8192];
int len;

while((len = is.read(arr)) != -1){
fos.write(arr,0,len);
}
fos.close();
socket.close();

} catch (IOException e) {

e.printStackTrace();
}
}
}.start();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息