客户端:

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. mysql中update+select

    mysql中不支持嵌套查询后更新操作. 但是可以使用inner join来解决自身的更新问题,参考如下例子: update hera_job a inner join( ),'"') as ...

  2. c# 调用非托管c++dll 参数问题(转)

    在C#中调用C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的调用这样的DLL接口函数呢?本文将详细 ...

  3. Java知多少(21)this关键字详解

    this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性.例如: public class Demo{ public int x = 10; publi ...

  4. MySQL PARTITION 分区

    MySQL HASH分区 http://www.cnblogs.com/chenmh/p/5644496.html RANGE分区:http://www.cnblogs.com/chenmh/p/56 ...

  5. 保证Activity启动时每次都调用create

    原文:https://stackoverflow.com/questions/41766547/run-oncreate-every-time-android-app-is-opened If you ...

  6. redis如何后台启动

    当安装好redis之后,运行redis-server命令之后,显示如图所示: 但是这样没有办法在这个tab下做任何操作了,因为这个时候使用Ctrl+c之后,就变成了这个样子 然后就关闭了,那么我想让r ...

  7. android基础---->SQLite数据库的使用

    SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使 ...

  8. 数据结构与算法——基数排序简单Java实现

    基数排序(radix sort)又称“桶子法”,在对多个正整数进行排序时可以使用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基数排序使用 ...

  9. day_5.20 py

    列表去重的两种方法 1.自己写程序  for循环 2.直接变为set类型

  10. linux 修改hosts文件

    1.修改hostssudo gedit /etc/hosts2.添加解析记录( . )完整案例:127.0.0.1 localhost.localdomain localhost简洁记录:127.0. ...