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

TCP-C/S结构,客户端向服务器端发送文件,并以指定路径与文件名保存

2020-01-15 11:16 1396 查看

客户端向服务端发送一个文件,并且在发送的时候指定这个路径和要保存的名字,
服务端收到后根据客户端发送过来的信息,用该名字保存数据到指定的路径
比如说客户端发送的结构为 :dir , filename , data 服务端收到后根据对应的来保存
客户端:

public class TCPClient {
public static void main(String[] args) {
//创建一个Fiel对象。构造方法中绑定要上传的数据路径
File file = new File("X:\\XX\\XXX\\java.txt");
//定义一个客户端
Socket socket = null;
//定义一个本地字节输入流
FileInputStream fis = null;
//定义一个对象序列化流
ObjectOutputStream oos = null;
try {
//获取客户端对象,构造方法中传递,服务器IP地址,和端口号
socket = new Socket("192.168.0.0", 8080);
//获取要读取的文件,构造方法中传递file对象
fis = new FileInputStream(file);
//定义一个数组,存放读取到的数据
byte[] bytes = new byte[1024];
//读取数据
fis.read(bytes);
//创建一个对象,构造方法中传递指定的目录,文件名以及读取到的文件数据
Path path = new Path("X:\\XX\\XX", "java.txt", bytes);
//获取到序列化流对象,构造方法中传递,客户端socket对象的网络字节输出流
oos = new ObjectOutputStream(socket.getOutputStream());
//将创建的对象,序列化,将对象以流的形式写入
oos.writeObject(path);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//关闭资源
oos.close();
fis.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//创建一个对象,实现了SeriaLiable接口,用于序列化
class Path implements Serializable {
//对象中定义三个属性
String dir;//指定的文件目录
String filename;//文件名
byte[] data;//文件数据

//无参构造
public Path() {
}

//全参构造
public Path(String dir, String filename, byte[] data) {
this.dir = dir;
this.filename = filename;
this.data = data;
}
}

服务器端:

public class TCPServer {
public static void main(String[] args) {
//定义一个服务器
ServerSocket server = null;
//定义一个本地字节输出流
FileOutputStream fos = null;
//定义一个对象的反序列化流
ObjectInputStream ois = null;
try {
//获取服务器对象,构造方法中绑定特定端口
server = new ServerSocket(8080);
//使用服务器对象的方法,获取到访问服务器的客户端对象socket
Socket socket = server.accept();
//获取反序列化流对象,构造方法中传递客户端对象的网络字节输入流
ois = new ObjectInputStream(socket.getInputStream());
//使用反序列化流对象,读取到传递过来的对象
Object readObject = ois.readObject();
//将对象强转
Path path = (Path) readObject;
//创建一个File对象,构造方法中传递客户端指定的路径
File file = new File(path.dir);
//file对象使用创建多级目录方法,如果有,则不创建,没有则创建
file.mkdirs();
//获取本地输出流对象,构造方法中传递要输出的路径以及指定的文件名
fos = new FileOutputStream(file + File.separator + path.filename);
//直接写入数据
fos.write(path.data);
} catch (ClassNotFoundException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
} finally {
try {
//关闭资源
fos.close();
ois.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

以上方法还可以继续完善,如服务器回写等

  • 点赞
  • 收藏
  • 分享
  • 文章举报
weixin_46016613 发布了24 篇原创文章 · 获赞 0 · 访问量 221 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐