基于网络编程实现文件的上传
上传一张图片
服务端
1、创建本地文件夹对象,并判断该文件夹是否存在,不存在则创建
File file = new File("E:\\****");
if (!file.exists()){
file.mkdirs();
}
注:****为文件夹名称
2、创建服务器套接字
ServerSocket server = new ServerSocket(****);
- 注:****为端口号,与客户端的端口号保存一致
3、使用套接字对象调用accep()方法,监听端口是否有对象,有则返回Socket对象
Socket socket = server.accept();
4、使用套接字对象获取网络输入流
InputStream is = socket.getInputStream();
5、创建本地字节输出流对象
FileOutputStream fos = new FileOutputStream(file + "\\iu.jpg");
注:file指向的是创建的文件夹
6、边读边写
byte[] bytes = new byte[1024];
int len;
while ((len = is.read(bytes)) != -1){
fos.write(bytes,0,len);
}
7、向客户端回写数据,从套接字对象中获取网络输出流对象
OutputStream os = socket.getOutputStream();
os.write("上传完毕!".getBytes());
8、关闭资源
fos.close();
socket.close();
server.close();
注:本地字节输出流对象(fos)也需要关闭
客户端
1、建立图片和程序之间的管道
FileInputStream fis = new FileInputStream("E:\\****\\iu.jpg");
- 注:括号中为图片在本地文件夹中的绝对路径
2、创建套接字对象
Socket socket = new Socket("127.0.0.1",****);
注:****为端口号,127.0.0.1为主机IP
3、从套接字对象中获取网络输出流对象
OutputStream os = socket.getOutputStream();
4、从源文件读数据,往服务端写数据
byte[] bytes = new byte[1024];
int len;
while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}
5、使用套接字对象关闭网络输出流对象
socket.shutdownOutput();
6、读取服务端回写的数据
InputStream is = socket.getInputStream();
len = is.read(bytes);
System.out.println(new String(bytes,0,len));
7、关闭资源
fis.close();
socket.close();
- 注:这里的图片与程序之间的管道(fis)是要关闭的,他是程序与本地文件的交互,没有使用网络套接字对象
注:先运行服务端,再运行客户端,顺序不能反,即可实现文件的上传