将客户端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实现服务端开启多线程处理客户端的上传图片请求的更多相关文章

  1. Java Socket 服务端发送数据 客户端接收数据

    服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...

  2. spring cloud eureka 服务端开启密码认证后,客户端无法接入问题

    Eureka服务端开启密码的认证比较简单 在pom文件中加入: <dependency> <groupId>org.springframework.boot</group ...

  3. Java TCP服务端向客户端发送图片

    /** * 1.创建TCP服务端,TCP客户端 * 2.服务端等待客户端连接,客户端连接后,服务端向客户端写入图片 * 3.客户端收到后进行文件保存 * @author Administrator * ...

  4. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

  5. java网络编程TCP传输—流操作—服务端反馈与客户端接收

    在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补 ...

  6. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...

  7. 使用rsync在windows(服务端)与linux(客户端)之间同步

    说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...

  8. Spring Cloud 服务端注册与客户端调用

    Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...

  9. centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解

    一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...

随机推荐

  1. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  2. Computer HDU - 2196

    Computer HDU - 2196 A school bought the first computer some time ago(so this computer's id is 1). Du ...

  3. 一个人的旅行 HDU - 2066 (最短路)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. Mdrill集群安装

    Mdrill集群安装 mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目.旨在帮助用户在几秒到几十秒的时间内,分析百亿级别的任意维度组合的数据.mdrill是一个分布式的在 ...

  5. TCP/IP网络编程之域名及网络地址

    域名系统 DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器.提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址 在浏览器地 ...

  6. laravel5.2总结--文件上传

    1 配置 文件系统的配置文件在 config/filesystems.php 文件中,此处我们新建一个uploads本地磁盘空间用于存储上传的文件,具体配置项及说明如下: <?php retur ...

  7. 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)

    还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY! 1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightness sys/devices ...

  8. 【LeetCode】Merge Sorted Array(合并两个有序数组)

    这道题是LeetCode里的第88道题. 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nu ...

  9. Goole Search Auto Complete

    这个项目就九章算法大数据课程的一个项目.主要分为两步: 第一步是 offline 建立 数据库 我们用两个map reduce 的data pipline 来实现. 第二步是 online显示把数据里 ...

  10. sed处理大txt文件(1G) 比如替换某一串字符串,或者删除一行

    1.将11.sql文件中"prompt"替换为"--prompt",然后保存为111.sql文件 sed -e "s,prompt,--prompt, ...