java实现服务端开启多线程处理客户端的上传图片请求
将客户端c:\\a.jpg 上传到e:\\公司名称+6位随机数.jpg 这样为了不断开连接客户端每次上传的图片名字不重名覆盖,验证之用
这里需要注意的是Socket的终止客户端的输入方法 shutdownOutput,如果不关闭发送服务器的输出流,线程就会阻塞,就没法接下去
接受服务发来的输入入流。
package demo04; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; /*
* 实现TCP图片上传客户端
* 实现步骤:
* 1.Socket套接字连接服务器
* 2.通过Socket获取字节输出流,写图片
* 3.使用自己的流对象,读取图片数据源
* FileInputSteam
* 4.读取图片,使用字节输出流,将图片写到服务器
* 采用字节数组进行缓冲
* 5.通过Socket套接字获取字节输入流
* 读取服务器发回来的上传成功
* 6.关闭资源
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",8000);
//获取字节输出流,图片写到服务器
OutputStream out=socket.getOutputStream();
//创建字节输入流,读取本机上的数据源图片
FileInputStream fis=new FileInputStream("c:\\a.jpg");
//开始读写字节数组
int len=0;
byte[] bytes=new byte[1024];
while((len=fis.read(bytes))!=-1){
out.write(bytes,0,len);
}
//给服务器写终止序列,
socket.shutdownOutput();
//获取字节输入流,读取服务器的上传成功
InputStream in=socket.getInputStream();
len=in.read(bytes);//如果读完会处于一直等待,进入阻塞状态
System.out.println(new String(bytes,0,len)); fis.close();
socket.close(); }
}
服务端的代码 实现runnale接口方式
package demo04; import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.Socket;
import java.util.Random; public class Upload implements Runnable{ private Socket socket; public Upload(Socket socket){this.socket=socket;} public void run() {
try{
//通过客户端连接对象,获取字节输入流,读取客户端图片
InputStream in=socket.getInputStream();
//将母的文件夹封装发哦File对象
File upload=new File("e:\\upload");
if(!upload.exists())
upload.mkdirs();
//创建字节输出流,将图片写入到母的文件中
//规则:域名+毫秒值+6位随机数
String filename="albb"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
//创建字节输出流,将图片写入到目的文件夹中
FileOutputStream fos=new FileOutputStream(upload+File.separator+filename);//separator跨平台的文件分隔符方法
byte[] bytes=new byte[1024];
int len=0;
while((len=in.read(bytes))!=-1){
fos.write(bytes,0,len);
} //通过客户端对象获取字节输出流
//上传成功写回客户端
socket.getOutputStream().write("上传成功".getBytes()); fos.close();
socket.close(); }catch(Exception e){ } } }
开启多线程的代码
package demo04; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class TCPThreadServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(8000);
while(true){
//获取到一个客户端,必须开启新线程
Socket socket=server.accept(); new Thread(new Upload(socket)).start();
}
}
}
java实现服务端开启多线程处理客户端的上传图片请求的更多相关文章
- Java Socket 服务端发送数据 客户端接收数据
服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...
- spring cloud eureka 服务端开启密码认证后,客户端无法接入问题
Eureka服务端开启密码的认证比较简单 在pom文件中加入: <dependency> <groupId>org.springframework.boot</group ...
- Java TCP服务端向客户端发送图片
/** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- java网络编程TCP传输—流操作—服务端反馈与客户端接收
在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...
- Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发
http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...
- 使用rsync在windows(服务端)与linux(客户端)之间同步
说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...
- Spring Cloud 服务端注册与客户端调用
Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...
- centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解
一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...
随机推荐
- momo不是玩具,.Net雄起
互联网时代 .NET 会渐渐衰落吗?一个架构师对 .NET 的思考 2015-12-14 11:03 darklx 博客园 字号:T | T 为了更好的适应互联网时代的需求,我们公司已经把我们的 .N ...
- time模块和datetime模块详解
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- 在 Amazon AWS 搭建及部署网站:(三)开发及部署环境
服务器已经搭建好,网站也开始运行了.那么如何方便地部署代码呢? 最基本的方式,就是使用 SFTP 向网站目录直接部署.这种方法的缺点是版本控制不便,在上传时也无法方便的比较代码变化. 用SVN来部署是 ...
- leetcode 【 Container With Most Water 】python 实现
题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...
- 设计模式之责任链模式 chainOfResp
后面我们将学习设计模式里面的行为型模式 代码实现 /** * 抽象类 * @author bzhx * 2017年3月14日 */ public abstract class Leader { pro ...
- schema.xml属性概念
# schema 定义逻辑库 checkSQLschema 当该值设置为 true 时,如果我们执行语句**select * from TESTDB.travelrecord;**则 MyCat 会 ...
- FastDFS的安装(复制自己用)
FastDFS 安装及使用 FastDFS 安装及使用 2012-11-17 13:10:31| 分类: Linux|举报|字号 订阅 Google了一下,流行的开源分布式文件系统有很多,介 ...
- SQL SERVER存储引擎——04.数据
4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...
- Mysql存储过程从0开始(上)
1.首先你要明白,mysql也是一种语言,他也可以编写程序,也是支持逻辑判断,if,elseif,else,switch,while等等的判断 2.mysql赋值一个变量的值操作:set @a = 1 ...
- java中的读/写锁
读写锁接口:ReadWriteLock,它的具体实现类为:ReentrantReadWriteLock 使用场景: 对于一个资源,读读能共存,读写不能共存,写写不能共存. 锁降级:从写锁变成读锁: 锁 ...