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协议,使其能够 ...
随机推荐
- JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C
3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...
- Computer HDU - 2196
Computer HDU - 2196 A school bought the first computer some time ago(so this computer's id is 1). Du ...
- 一个人的旅行 HDU - 2066 (最短路)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Mdrill集群安装
Mdrill集群安装 mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目.旨在帮助用户在几秒到几十秒的时间内,分析百亿级别的任意维度组合的数据.mdrill是一个分布式的在 ...
- TCP/IP网络编程之域名及网络地址
域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器.提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址 在浏览器地 ...
- laravel5.2总结--文件上传
1 配置 文件系统的配置文件在 config/filesystems.php 文件中,此处我们新建一个uploads本地磁盘空间用于存储上传的文件,具体配置项及说明如下: <?php retur ...
- 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)
还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY! 1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightness sys/devices ...
- 【LeetCode】Merge Sorted Array(合并两个有序数组)
这道题是LeetCode里的第88道题. 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nu ...
- Goole Search Auto Complete
这个项目就九章算法大数据课程的一个项目.主要分为两步: 第一步是 offline 建立 数据库 我们用两个map reduce 的data pipline 来实现. 第二步是 online显示把数据里 ...
- sed处理大txt文件(1G) 比如替换某一串字符串,或者删除一行
1.将11.sql文件中"prompt"替换为"--prompt",然后保存为111.sql文件 sed -e "s,prompt,--prompt, ...