137-TCP综合案例
1.文件上传案例原理分析
需求分析
注意这里的不同颜色本地流 网络流
2.文件上传案例客户端代码实现
文件上传案例的客户端:读取本地文件,上传到服务器,再读取服务器回写的数据 明确: 数据源:c:\\1.jpg 目的地:服务器 实现步骤: 1、创建一个本地的字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2、创建一个客户端Socket对象,构造方法中绑定指定服务器的ip地址和端口号 3、使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象 4、使用本地字节输入流FileInputStream对象中的方法read,读取本地的文件 5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器 6、使用Socket中的方法getInputStream,获取网络字节输出流InputStream对象 7、使用网络字节输入流InputStream对象中的方法read读取服务回写的数据 8、释放资源(FileInputStream,Socket)
public class TCPclient {
public static void main(String[] args) throws IOException {
//1、创建一个本地的字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
FileInputStream fis = new FileInputStream("D:\\百度网盘下载\\03_文件上传的原理.bmp");
// 2、创建一个客户端Socket对象,构造方法中绑定指定服务器的ip地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
//3、使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
OutputStream os = socket.getOutputStream();
//4、使用本地字节输入流FileInputStream对象中的方法read,读取本地的文件
int len;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
//5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器
os.write(bytes, 0, len);
}
//6、使用Socket中的方法getInputStream,获取网络字节输出流InputStream对象
InputStream is = socket.getInputStream();
//7、使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
while ((len = is.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
fis.close();
socket.close();
}
}
3.文件上传案例服务器端代码实现
案例服务器端,读取客户端上传的文件,保存到服务器的硬盘,给客户端回写“上传成功” 明确: 数据源:客户端上传的文件 目的地:服务器的硬盘d:\\upload\\1.jpg 实现步骤: 1.创建一个服务器ServerSocket对象,和系统要指定的端口号 2.使用ServerSocket对象中的方法accept 获取到请求的客户端Socket对象 3、使用Socket对象中的方法getInputStream获取到网络字节输入流InputStream对象 //注意这里使用客户端的流来读取 4、判断一下d:\\upload文件夹是否存在如果不存在则创建一个 5、创建一个本地的字节输出流对象FileOutputStream 构造方法中绑定要输出的目的地 6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件 7、使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存在服务器的硬盘上 8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象、/注意这里使用客户端的流来写入 9、使用网络字节输出流OutputStream对象中的方法write,给客户端回写“上传成功” 10、释放资源(FileOutputStream Socket ServerSocket)
public class TCPserver {
public static void main(String[] args) throws IOException {
//1.创建一个服务器ServerSocket对象,和系统要指定的端口号
ServerSocket server = new ServerSocket(8888);
// 2.使用ServerSocket对象中的方法accept 获取到请求的客户端Socket对象
Socket socket = server.accept();
// 3、使用Socket对象中的方法getInputStream获取到网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
// 4、判断一下d:\\upload文件夹是否存在如果不存在则创建一个
File file =new File("d:\\upload");
if (!file.exists()){
file.mkdirs();
}
// 5、创建一个本地的字节输出流对象FileOutputStream 构造方法中绑定要输出的目的地
FileOutputStream fos = new FileOutputStream("d:\\upload\\1.jpg");
// 6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
int len = 0;
byte[] bytes = new byte[1024];
while((len=is.read(bytes))!=-1){
// 7、使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存在服务器的硬盘上
fos.write(bytes,0,len);
}
// 8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象、/注意这里使用客户端的流来写入
// 9、使用网络字节输出流OutputStream对象中的方法write,给客户端回写“上传成功”
socket.getOutputStream().write("上传成功".getBytes());
fos.close();
socket.close();
server.close();
}
}