java上传网络图片_java网络编程之图片上传
输入输出流核心代码
所有的文件传输都是靠流,其中文件复制最具代表性.输入流和输出流,从输入流中读取数据写入到输出流中。
InputStream in =输入源;
OutputStream os=输出目的;byte[] bytes = new byte[1024];int len = 0;while((len = in.read(bytes))!=-1){ //读取到文件末尾的话可以读到-1
os.write(bytes,0,len);
}
os.close();
in.close();
TCP图片上传客户端
1.Socket套接字连接服务器,指定ip和端口
Socket socket = Socket(String host, int port);
2.通过Socket获取字节输出流,向服务器写图片
OutputStream os = socket.getOutputStream();
3.创建输入流对象,读取图片数据源
FileInputStream fis = new FileInputStream(filePath);
4.读取图片,使用字节输出流,将图片写到服务器,采用字节数组进行缓冲
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}
socket.shutdownOutput();//文件读完时给服务器写终止序列
5.通过Socket套接字获取字节输入流,读取服务器发回来的上传成功
InputStream inputStream = socket.getInputStream();
len = inputStream.read(bytes);
System.out.println("服务器返回:"+new String(bytes,0,len));
6.关闭资源
socket.close();
/*** 实现TCP图片上传客户端
* 实现步骤:
* 1.Socket套接字连接服务器,指定ip和端口
* Socket socket = Socket(String host, int port);
* 2.通过Socket获取字节输出流,写图片
* OutputStream os = socket.getOutputStream();
* 3.使用自己的流对象,读取图片数据源
* FileInputStream fis = new FileInputStream(filePath);
* 4.读取图片,使用字节输出流,将图片写到服务器,采用字节数组进行缓冲
* int len = 0;
* byte[] bytes = new byte[1024];
* while ((len = fis.read(bytes)) != -1){
* os.write(bytes,0,len);
* }
* 5.通过Socket套接字获取字节输入流,读取服务器发回来的上传成功
* InputStream inputStream = socket.getInputStream();
* len = inputStream.read(bytes);
* System.out.println("服务器返回:"+new String(bytes,0,len));
* 6.关闭资源
* socket.close();
*
* Created by Autumn on 2018/2/5.*/
public classTCPClient {public static void main(String[] args) throwsIOException {
String ip= "127.0.0.1";int port = 8000;
File fileFolder= new File("D:\\Users\\Autumn\\Pictures");
uploadPic(ip,port,fileFolder+File.separator+"tiger.jpg");
uploadPic(ip,port,fileFolder+File.separator+"water.jpg");
uploadPic(ip,port,fileFolder+File.separator+"sunset.jpg");
}/*** 上传图片
*@paramip 服务器ip地址
*@paramport 服务器端口号
*@paramfilePath 文件路径
*@throwsIOException*/
public static void uploadPic(String ip,int port,String filePath) throwsIOException{//创建客户端Socket
Socket socket = newSocket(ip,port);//根据Socket获取字节输出流,用此流将图片写到服务器
OutputStream os =socket.getOutputStream();//创建字节输入流,读取本机上的数据源图片
FileInputStream fis = newFileInputStream(filePath);//开始读写字节数组,从输入流中读取到输出流
int len = 0;byte[] bytes = new byte[1024];while ((len = fis.read(bytes)) != -1){
os.write(bytes,0,len);
}//文件读完时给服务器写终止序列
socket.shutdownOutput();//获取字节输入流,读取服务器的上传成功
InputStream inputStream =socket.getInputStream();
len=inputStream.read(bytes);
System.out.println("服务器返回:"+new String(bytes,0,len));
socket.close();
}
}
TCP图片上传服务器端
1.ServerSocket套接字对象,监听8000
ServerSocket serverSocket = ServerSocket(int port);
2.方法accept()获取客户端的连接对象
Socket socket = serverSocket.accept();
3.客户端连接对象获取字节输入流,读取客户端发送图片
InputStream in = socket.getInputStream();
4.创建File对象,绑定上传文件夹。判断文件夹存在,不存在则创建文件夹
File upload = new File("d:\\upload");
if (!upload.exists()){
upload.mkdirs();
}
5.创建字节输出流,数据目的File对象所在文件夹
String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
6.字节流读取图片,字节流将图片写入到目的文件中
byte[] bytes = new byte[1024];
int len = 0;
while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到-1,所以这里永远读不到-1,read()会一直阻塞。(需要客户端发送结束标志)
fos.write(bytes,0,len);
}
7.将上传成功回写给客户端
socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
8.关闭资源
fos.close();
socket.close();
/*** 多线程接收图片
* Created by Autumn on 2018/2/5.*/
public classTCPThreadServer {public static void main(String[] args) throwsIOException {//服务端不用指定ip地址,只需指定端口号
ServerSocket serverSocket = new ServerSocket(8000);while(true){//获得一个客户端Socket对象,开启一个线程
Socket socket = serverSocket.accept(); //线程阻塞
new Thread(newUpload(socket)).start();
}
}
}/*** TCP图片上传服务器
* 1.ServerSocket套接字对象,监听8000
* ServerSocket serverSocket = ServerSocket(int port);
* 2.方法accept()获取客户端的连接对象
* Socket socket = serverSocket.accept();
* 3.客户端连接对象获取字节输入流,读取客户端发送图片
* InputStream in = socket.getInputStream();
* 4.创建File对象,绑定上传文件夹。判断文件夹存在,不存在则创建文件夹
* File upload = new File("d:\\upload");
* if (!upload.exists()){
* upload.mkdirs();
* }
* 5.创建字节输出流,数据目的File对象所在文件夹
* String fileName = "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";
* FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);
* 6.字节流读取图片,字节流将图片写入到目的文件中
* byte[] bytes = new byte[1024];
* int len = 0;
* while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到1,所以永远读不到-1
* fos.write(bytes,0,len);
* }
* 7.将上传成功回写给客户端
* socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
* 8.关闭资源
* fos.close();
* socket.close();
* Created by Autumn on 2018/2/5.*/
public class Upload implementsRunnable {privateSocket socket;publicUpload(Socket socket){this.socket =socket;
}
@Overridepublic voidrun() {try{//获取输入流
InputStream in =socket.getInputStream();//创建文件夹
File upload = new File("d:\\upload");if (!upload.exists()){
upload.mkdirs();
}
String fileName= "pic"+System.currentTimeMillis()+ new Random().nextInt(9999)+".jpg";//创建字节输出流,将图片写入到目的文件夹 upload:d://upload
FileOutputStream fos = new FileOutputStream(upload+File.separator+fileName);//读写字节数组
byte[] bytes = new byte[1024];int len = 0;while((len = in.read(bytes))!=-1){ //读的是客户端发过来图片的字节数组,只有读文件能读到1,所以永远读不到-1
fos.write(bytes,0,len);
}
System.out.println("成功接收来自"+socket.getInetAddress()+socket.getPort()+"的图片!");//通过客户端连接对象获取字节输出流//上传成功写会客户端
socket.getOutputStream().write(("上传到服务器"+socket.getLocalAddress().toString()+"成功").getBytes());
fos.close();
socket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
java上传网络图片_java网络编程之图片上传相关推荐
- java 仿qq 传文件_java网络编程实现QQ发消息文件,图片等内容
前言:昨天我们已经初步学习了网络编程到底是怎么一回事儿,今天在此基础上继续学习网络编程,利用网络编程实现 QQ上的发送消息,群聊,私聊等功能. 首先我们来回顾一下昨天的两点基础知识: 1.建立服务器端 ...
- java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...
使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C++网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您 ...
- java飞鸽传书_feige 飞鸽传书源代码java 实现不错的联系网络编程的资料飞鸽传书的GUI(java实现) - 下载 - 搜珍网...
我的飞鸽传书/FileFilter.java 我的飞鸽传书/FileNameExtensionFilter.java 我的飞鸽传书/飞鸽传书/classes/feige/About.class 我的飞 ...
- java推送技术_java网络编程 - java服务器推送技术系列方案实战
前言 服务器推送技术(又名Comet)是建立在ARP基础之上的一种非常实用的技术,它广泛应用于Web端,手机APP应用端等.具体很多场景都需要此技术的支撑,包括扫码登录.扫码支付.网页支付.端到端消息 ...
- java tcp怎么拆包_Java网络编程基础之TCP粘包拆包
TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...
- java 服务器 http请求_Java网络编程——发送HTTP请求到服务器
当Java程序需要向服务器发送请求或读取服务器数据时,使用URLConnection类是比较好的选择.URLConnection类封装了与服务器互动操作的方法,通过它可以建立与服务器的远程连接,检查服 ...
- java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...
20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...
- Java核心类库篇8——网络编程
Java核心类库篇8--网络编程 1.七层网络模型 OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型. 当发 ...
- Java基础(七)——网络编程
版本 说明 发布日期 1.0 发布文章第一版 2020-12-29 文章目录 前言 Socket使用了应用层协议么?其和HTTP协议有关系么? 基于TCP协议的网络编程 ServerSocket类 S ...
最新文章
- java -jar 未响应_Java 方法性能监控和统计工具 MyPerf4J
- Linux 命令行的聊天工具 CenterIM
- Java程序员涨薪必备技能
- QImage与OpenCV中的MAT图像格式转换
- 传说中的CAFEBABE到底在哪儿?
- 计算机MCI风险快速筛查系统,轻度认知障碍风险快速筛查工具的测算过程及判别效果分析...
- Centos7通过yum安装jsoncpp库
- About SOuP
- 我用大屏模板做年中可视化报告,惊艳了在场的同事和领导
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...
- C语言日字,【C语言日日练(二)】static关键字
- 德宝怡高获批省大数据产业园
- 腾讯微博开放平台发布者分享会(陈思齐)
- 最新正版win7系统下载
- intelliJ IDEA 2017 破解方法
- 场内场外交易成本_场内基金交易费用更低,但为什么我们都建议大家购买场外基金?...
- 蓝桥杯T32(树的直径)
- iMX6ULL启动流程
- Spring Boot 核心注解?主要由哪几个注解组成?
- 企业官网建设需要多少钱
热门文章
- 取消tableView上面多出来20个像素
- Ubuntu11.04在Win7下从硬盘安装 和 使用体验
- 解决 OCFS2 不能自动挂载 提示 o2net_connect_expired
- leetcode 110. 平衡二叉树
- 126.数据链路层有哪些协议?
- 5种流行的Web抓取Python库,你用过哪种?
- FPGA实验——译码器原理及实现
- android编程用真机模拟,android编程的广播,模拟器可接受,但真机不可接受。
- JavaSE基础复习总结
- php连接redis 主从复制,redis怎么进行主从复制