package com.itheima_day19;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
//将一个文件中的内容拷贝到另一个文件中
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",6666); //创建套接字对象,与自己相连,端口号为6666
File file = new File("a.txt"); //提供文件,用于操作,(将a.txt中的内容拷贝到另一个文件中)
int len = (int)file.length(); //获取a.txt文件的大小,即文件所占字节数
OutputStream os = socket.getOutputStream(); //获取Socket套接字的输出流
os.write((len+"").getBytes()); //将字节数先从int类型转换为String类型然后再转为byte[]数组类型写出去
FileInputStream fis = new FileInputStream(file);//创建字节输入流对象,并将file传入
ByteArrayOutputStream baos = new ByteArrayOutputStream();//创建内存输出流对象
int c ; //定义一个变量c,目的是为了后续fis读取时防止漏掉东西
while((c = fis.read()) != -1) { //用while循环读取file文件中的内容,这是一个一个读的
baos.write(c); //将读到的内容写入内存输出流,因为上面试一个一个都的,所以这里也是一个一个写入的
}
byte[] bytesData = baos.toByteArray(); //将内存输出流中的内容转化为字节数组类型
os.write(bytesData); //将bytesData通过os写出
fis.close(); //关闭字节输入流
socket.close(); //关闭socket对象,不用os.close(),原因你懂得
}
}
package com.itheima_day19;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(6666); //创建ServerSocket对象,传入端口号6666
Socket socket = server.accept(); //同意连接并侦听
InputStream is = socket.getInputStream(); //获取Socket的输入流
byte[] bytes = new byte[1024]; //创建字节数组bytes,大小为1024,用于接收Client传来的字节数大小的值
int len = is.read(bytes); //将Client传来的字节数大小的值存入bytes中
String sLen = new String(bytes,0,len); //将bytes中存储的byte类型的字节数转化为String类型
int fileLength = Integer.parseInt(sLen); //再将String类型的字节数转化为int类型
byte[] bytesData = new byte[fileLength]; //创建fileLength长度的字节数组,用于接收Client中a.txt文件的中的内容
FileOutputStream fos = new FileOutputStream("b.txt"); //创建字节输出流对象,将目的地文件b.txt传入,如果存在b.txt那么就复制进去,如果不存在,就创建一个并复制内容
is.read(bytesData); //读取Client传过来的文本内容,并存储到bytesData数组中
fos.write(bytesData); //将bytesData数组中的内容写入到b.txt中
System.out.println("Done!"); //完成!
fos.close(); //关闭字节输出流
socket.close(); //关闭套接字对象
server.close(); //关闭server
}
}
|
|