java 网络编程(五)Socket多线程上传文件
客户端:
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多线程上传文件的更多相关文章
- Java网络编程(TCP协议-练习-上传文本文件)
客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...
- [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件
A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求 2.上传相册相片 UIImagePickerCon ...
- Java EE之通过表单上传文件
public class Ticket { private String customerName; private String subject; private String body; priv ...
- java http工具类和HttpUrlConnection上传文件分析
利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...
- 菜鸟学SSH(五)——Struts2上传文件
上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...
- Java如何解决form表单上传文件,以及页面返回处理结果通知!
前端JSP代码 <form id='formSumbit' class='form-horizontal' action='/ncpay/route/chlsubmcht/batchImpor' ...
- 基于socket实现上传文件
基于socket实现文件上传 客户端代码: #!/usr/bin/env python # -*- coding:utf-8 -*- """ 这个是实现上传文件 首先让客 ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...
- 『网络の转载』关于初学者上传文件到github的方法
说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...
随机推荐
- 【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图
在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数. 通常情况下,在Python中可以通过Matplotlib来进行绘制图像.然而该绘制过程是静态的,也就是每次调整完参数需要重 ...
- hdoj:2028
#include <iostream> using namespace std; int main() { int n, i; ]; while (cin >> n) { in ...
- Java知多少(16)StringBuffer与StringBuider
String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间. StringBuffer类和String类一样,也用来表示字符串,但是Strin ...
- Ubuntu下安装Solr
1.在清华开源软件镜像站或者http://www.us.apache.org/dist/ 下载Solr的安装包,我下载的是solr-6.5.1.tgz 2.解压并移动到/usr/local目录下 3. ...
- last
last reboot 显示系统最后重启的历史记录 last -w 显示自系统启动以来,所有登录的用户(全名)
- spring quartz1.8.6集群结算服务定时任务与appserver独立分开
1.quartz集群如何处理同一个数据库,同一套sqtz表的lock问题,否则会导致打架. 思路如下: 1.com.xxx.quartz.BeanInvokingJobDetailFactoryBea ...
- 设计模式-行为型模式,python 中介者模式
中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行 ...
- YSQL获取自增ID的四种方法(转发)
YSQL获取自增ID的四种方法(转发) 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与t ...
- day_10py 简单地名字管理系统
#!/usr/bin/env/python #-*-coding:utf-8-*- ''' 名字管理系统 做程序迭代,由点到面一点一点来 ''' # 1.打印功能提示 print("=&qu ...
- mysql迁移sqlserver
数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...