客户端:

package cn.sasa.socketUploadFileDemo;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class SocketClientDemo { public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8050);
OutputStream output = socket.getOutputStream(); FileInputStream inputFile = new FileInputStream("D:\\sasa\\Weixin.zip");
byte[] buff = new byte[1024];
int len = 0;
while((len = inputFile.read(buff)) != -1) {
output.write(buff,0,len);
}
//传完后告诉服务器上传完成,否则服务器会一直等待读取
socket.shutdownOutput(); InputStream input = socket.getInputStream();
len = input.read(buff);
System.out.println(new String(buff,0,len)); socket.close();
inputFile.close();
}
}

服务端:

package cn.sasa.socketUploadFileDemo;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class ServerSocketDemo { public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8050);
//一直监听
while(true) {
Socket clientSocket = server.accept();
Thread th = new Thread(new UploadRunnable(clientSocket));
th.start();
}
} }

Runnable接口的实现类UploadRunnable.java,用于上传文件

package cn.sasa.socketUploadFileDemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class UploadRunnable implements Runnable { private Socket clientSocket;
public UploadRunnable(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
InputStream input = clientSocket.getInputStream();
File upload = new File("D:\\upload");
if(!upload.exists()) {
upload.mkdirs();
}
//文件命名
String fileName = "sasa"+ System.currentTimeMillis()+".zip";
FileOutputStream outputFile = new FileOutputStream(upload+File.separator+fileName);
byte[] buff = new byte[1024];
int len = 0;
while((len = input.read(buff)) != -1) {
outputFile.write(buff,0,len);
}
OutputStream output = clientSocket.getOutputStream();
output.write("上传完成".getBytes());
outputFile.close();
clientSocket.close();
}catch(Exception ex) {
ex.printStackTrace();
}
} }

java 网络编程(五)Socket多线程上传文件的更多相关文章

  1. Java网络编程(TCP协议-练习-上传文本文件)

    客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...

  2. [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

    A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求     2.上传相册相片 UIImagePickerCon ...

  3. Java EE之通过表单上传文件

    public class Ticket { private String customerName; private String subject; private String body; priv ...

  4. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

  5. 菜鸟学SSH(五)——Struts2上传文件

    上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...

  6. Java如何解决form表单上传文件,以及页面返回处理结果通知!

    前端JSP代码 <form id='formSumbit' class='form-horizontal' action='/ncpay/route/chlsubmcht/batchImpor' ...

  7. 基于socket实现上传文件

    基于socket实现文件上传 客户端代码: #!/usr/bin/env python # -*- coding:utf-8 -*- """ 这个是实现上传文件 首先让客 ...

  8. Android 利用an框架快速实现网络请求(含下载上传文件)

    作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...

  9. 『网络の转载』关于初学者上传文件到github的方法

    说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...

随机推荐

  1. Go Revel - app.conf

    ##概览 `app.conf`为应用程序的配置文件,它使用`goconfig`的语法,与windows的ini文件类似. 示例: app.name=chat app.secret=pJLzyoiDe1 ...

  2. Mac 抓包工具wireshark使用

    共四部分 1.wireshark简介 2.wireshark mac版安装 3.wireshark 抓取普通http 4.高级应用 1.wireshark 简介(百度百科) Wireshark(前称E ...

  3. NoSuchMethodError: ... addOnCompleteCallback

    问题描述: 使用ES 2.3.1和Spark streaming 2.1时,出现以上报错信息. 原因: addOnCompleteCallback方法在spark2.0中移除了 The addOnCo ...

  4. linq 把list分组为 List<List>

    public class User { public int UserID { get; set; } public string UserName { get; set; } public int ...

  5. 服务器部署多个tomcat(Address already in use: JVM_Bind)

    一.修改startup.bat **多个Tomcat同时运行时.不要设置 catalina_home catalina_base classes 环境变量, 修改setclasspath.bat (| ...

  6. Tensorflow学习笔记——安装和运行

    参考的资料: 1.官网 2.tensorflow官方文档中文版 安装的是Python 2.7; CPU support (no GPU support),版本是1.1 pip install tens ...

  7. supervisor的command执行两条命令

    如下supervisor的进程的comand配置参数只能写一个命令 1.要执行多条命令,可以写个sh文件包含多条命令,然后sh -x   xxxx.sh,但这样又多了一个文件, 2.把所有命令放在字符 ...

  8. 获取linux服务进程号

    ps -ef | grep "服务名" | grep -v "grep" | awk '{print $2}' # ps -ef|grep "被查询的 ...

  9. Git 学习笔记--拉取远程分支到本地

    1.查看远程分支,和上面的第一步相同2. 从远程获取最新版本到本地 git fetch origin master:temp git fetch origin master:temp 这句命令的意思是 ...

  10. 【CF566C】Logistical Questions 点分

    [CF566C]Logistical Questions 题意:给你一棵n个点的树,点有点权,边有边权,两点间的距离为两点间的边权和的$3\over 2$次方.求这棵树的带权重心. $n\le 200 ...