java_网络编程之上传文件案例
初期成果:
客户端:
package FileUpload;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
//1.让用户指定上传文件
System.out.println("请输入需要上传的文件");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
File file = new File(s);
//2.判断文件是否存在并告知用户
if(!file.exists()){
System.out.println("对不起您指定的文件不村子啊");
return;
}else{
//3.创建客户端并绑定服务器IP和端口号
Socket socket = new Socket("127.0.0.1", 8888);
//4.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
OutputStream outputStream = socket.getOutputStream();
//5.创建本地字节输入流读取文件
FileInputStream fis = new FileInputStream(file);
//6.读取文件并通过网络传送到服务器
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
//6.1因为程序会阻塞所以使用shutdownOutput结束输出流
socket.shutdownOutput();
//7.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//8.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
while ((len = is.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
//释放资源
socket.close();
fis.close();
}
}
}
服务器端:
package FileUpload;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
//1.创建服务器
ServerSocket serverSocket = new ServerSocket(8888);
//2.判断服务器文件夹是否存在
File file = new File("E:\\aikang");
if (!file.exists()){
file.mkdirs();
}
//3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
Socket socket = serverSocket.accept();
//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//5.获取本地输出流对象储存数据
FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg");
//6.读取网络输入流对象的数据并输出到硬盘
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//7.获取网络字节输出流回写给客户端提示
OutputStream os = socket.getOutputStream();
os.write("上传完成".getBytes());
//8.释放资源
serverSocket.close();
socket.close();
}
}
第二次:优化服务器一直跑
服务器端:
package FileUpload;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
//1.创建服务器
ServerSocket serverSocket = new ServerSocket(8888);
//2.判断服务器文件夹是否存在
File file = new File("E:\\aikang");
if (!file.exists()){
file.mkdirs();
}
//加while
while (true){
//3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
Socket socket = serverSocket.accept();
//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//5.获取本地输出流对象储存数据
FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg");
//6.读取网络输入流对象的数据并输出到硬盘
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes))!=-1){
fos.write(bytes,0,len);
}
//7.获取网络字节输出流回写给客户端提示
OutputStream os = socket.getOutputStream();
os.write("上传完成".getBytes());
//8.释放资源
socket.close();
fos.close();
}
}
}
第三次优化:多用户同时上传使用多线程
package FileUpload;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
//1.创建服务器
ServerSocket serverSocket = new ServerSocket(8888);
//2.判断服务器文件夹是否存在
File file = new File("E:\\aikang");
if (!file.exists()){
file.mkdirs();
}
//加while
while (true){
//3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
Socket socket = serverSocket.accept();
//使用多线程
new Thread(new Runnable() {
//完成文件上传
@Override
public void run() {
try {//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//5.获取本地输出流对象储存数据
FileOutputStream fos = new FileOutputStream(file + "\\" + System.currentTimeMillis() + new Random().nextInt() + ".jpg");
//6.读取网络输入流对象的数据并输出到硬盘
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
//7.获取网络字节输出流回写给客户端提示
OutputStream os = socket.getOutputStream();
os.write("上传完成".getBytes());
//8.释放资源
socket.close();
fos.close();
}catch (IOException e){
System.out.println(e);
}
}
}).start();
}
}
}
java_网络编程之上传文件案例的更多相关文章
- Android 网络编程--上传文件及相应的参数到服务器
之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...
- FTP文件操作之上传文件
上传文件是一个比较常用的功能,前段时间就做了一个上传图片的模块.开始采用的是共享文件夹的方式,后来发现这种方法不太好.于是果断将其毙掉,后来选择采用FTP的方式进行上传.个人感觉FTP的方式还是比较好 ...
- react native 之上传文件
最近遇到react native中需要上传一些图片到后台.期间,找了一些第三方上传插件,感觉不太好用,要么只支持一个平台,要么会对其他第三方造成影响,实在无奈.只能直接使用fetch上传.其中上传文件 ...
- 转:python webdriver API 之上传文件
文件上传操作也比较常见功能之一,上传功能操作 webdriver 并没有提供对应的方法,关键上传文件的思路.上传过程一般要打开一个系统的 window 窗口,从窗口选择本地文件添加.所以,一般会卡在如 ...
- Django之上传文件
使用Form表单上传文件 upload.html <!DOCTYPE html> <html lang="en"> <head> <met ...
- Android WebView那些坑之上传文件
最近公司项目需要在WebView上调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片. 解决问题之前我们先来说说WebView上传文件的逻辑:当我们在Web页面上点击 ...
- Flask入门之上传文件到服务器
今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py # coding:utf-8 from flask import Flask,render_templa ...
- LoadRunner开发ftp协议接口之上传文件脚本
Action() { //建立一个ftp对象 FTP ftp1=0; //建立FTP连接并登录 ftp_logon_ex(&ftp1,"ftpLogon", "U ...
- jQuery插件之上传文件ajaxfileupload.js源码与使用
在网页应用中,一般会用到上传文件或者图片什么的到服务器,那么可以用ajaxfileupload.js,但是在使用ajaxfileupload.js时候,当服务器返回的json带有&符号的时候, ...
随机推荐
- 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 说实话很不想写这篇文章,因为这和我一贯推崇的最好全部编译并使用w ...
- 取对数求阶乘位数——lightoj1045
/* 求 n! 在base进制下的位数 取对数,用换底公式,预处理对数前缀和 b^x = n! x = log_b(n!) = log_10(n!)/log_10(b) 对x向上取整即可 */ #in ...
- NOIp2018集训test-9-1(pm)
欢乐%你赛,大家都AK了. 1. 小澳的方阵 吸取了前几天的教训,我一往复杂的什么二维树状数组上想就立刻打住阻止自己,就可以发现它是超级大水题了.记录每一行每一列最后一次的修改,对每个格子看它所在行和 ...
- NX二次开发-UFUN添加工程图投影视图UF_DRAW_add_orthographic_view
NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_obj.h> #include <u ...
- NX二次开发-UFUN关闭STL文件函数UF_STD_close_stl_file
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- (转)VS2010-MFC编程入门教程之目录和总结
目前该教程可以到鸡啄米编程课堂去学习,阅读体验更好,更适合在线学习. 原文目录及链接: 一.VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入 ...
- Python3 From Zero——{最初的意识:007~函数}
一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...
- Python:获取当前py的文件名
采用pathlib库 from pathlib import Path Path(__file__).name
- 21-Ubuntu-文件和目录命令-复制文件和目录-cp
cp 将给出的文件或目录复制到另一个文件或目录,相当于DOS下的copy命令 选项 含义 -f 已经存在的目标文件直接覆盖,不提示 -i 覆盖文件前提示 -r 若给出的源文件是目录文件,则cp将递归复 ...
- Datagrid 的 SelectItem 和 SelectValue 如何区分、DataContext 和 ItemSource 在绑定时该绑哪个?
1.selecteditem.selectedvalue.selectedvaluepath三个属性 场景: class T { public string A { get; set; } publi ...