采用socket传输文件
采用socket传输文件
客户端输入文件的地址,服务端判断文件存在,就将文件传输到客户端
package com.fly.socket; import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) { try {
int i=;
ServerSocket serverSocket=new ServerSocket();
while(true){
System.out.println("服务器已启动!");
Socket socket =serverSocket.accept();
Thread thread=new Thread(new ThreadHandler(socket),"Thread-"+i++);
thread.start();
} } catch (IOException e) {
e.printStackTrace();
}
}
} class ThreadHandler implements Runnable {
private Socket socket; public ThreadHandler(Socket socket) {
this.socket = socket;
} @Override
public void run() {
DataOutputStream dataOutputStream=null;
DataInputStream dataInputStream=null;
DataInputStream localRead =null;
try {
dataOutputStream=new DataOutputStream(socket.getOutputStream());
dataInputStream=new DataInputStream(new BufferedInputStream(socket.getInputStream())); String filePath = dataInputStream.readUTF();
File file=new File(filePath);
//判断文件是否存在
if(!file.exists()){
return;
}else{
//文件名
String fileName = file.getName();
dataOutputStream.writeUTF(fileName);
dataOutputStream.flush();
//文件大小
long length = file.length();
dataOutputStream.writeUTF(String.valueOf(length));
dataOutputStream.flush(); System.out.println("开始向 "+Thread.currentThread().getName()+
" 发送文件,文件名:"+fileName+" 文件大小"+length);
localRead =new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
byte[] bytes=new byte[];
while (true){
int read=;
if(localRead!=null){
read = localRead.read(bytes);
}
if(read==-){
break;
}
dataOutputStream.write(bytes,,read);
dataOutputStream.flush();
}
System.out.println("向 "+Thread.currentThread().getName()+" 发送文件完毕!");
} } catch (IOException e) {
e.printStackTrace();
}finally {
try {
localRead.close();
dataOutputStream.close();
dataInputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
package com.fly.socket; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.Scanner; public class Client { public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DataInputStream dateInputStream=null;
DataOutputStream dataOutputStream=null;
DataOutputStream localWrite=null;
Socket socket=null;
try {
socket=new Socket();
SocketAddress address = new InetSocketAddress("127.0.0.1", );
socket.connect(address);
//输入流
dateInputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
//输出流
dataOutputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
System.out.println("请输入文件路径:");
String filePath = in.next();
dataOutputStream.writeUTF(filePath);
dataOutputStream.flush(); String fileName = dateInputStream.readUTF();
String length=dateInputStream.readUTF();
System.out.println("文件名:"+fileName+" 文件大小:"+length);
localWrite=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:/"+fileName)));
byte[] bytes=new byte[];
while (true){
int read=;
if(dateInputStream!=null){
read = dateInputStream.read(bytes);
}
if(read==-){
break;
}
localWrite.write(bytes,,read);
localWrite.flush();
}
System.out.println("文件传输完毕!");
} catch (IOException e) {
e.printStackTrace();
}finally {
in.close();
try {
localWrite.close();
dataOutputStream.close();
dateInputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} } } }
采用socket传输文件的更多相关文章
- Java使用Socket传输文件遇到的问题(转)
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
- Java使用Socket传输文件遇到的问题
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...
- python socket 传输文件
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...
- Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...
- Python Socket传输文件
发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一 ...
- IOS — 关于Socket传输文件需要自定义延时或者包大小的情况
1. 首先导入头文件 #include <stdio.h> #include <errno.h> #include <string.h> #include < ...
- Linux C++ TCP Socket传输文件或图片实例
环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服 ...
- Java学习笔记——Socket实现文件传输
我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...
- 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...
随机推荐
- 08-Flutter移动电商实战-dio基础_伪造请求头获取数据
在很多时候,后端为了安全都会有一些请求头的限制,只有请求头对了,才能正确返回数据.这虽然限制了一些人恶意请求数据,但是对于我们聪明的程序员来说,就是形同虚设.这篇文章就以极客时间 为例,讲一下通过伪造 ...
- learning java 处理流的用法
有点重定向使用的味道 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.Pri ...
- My journey introducing the data build tool (dbt) in project’s analytical stacks
转自:https://www.lantrns.co/my-journey-introducing-the-data-build-tool-dbt-in-projects-analytical-stac ...
- 开源项目 11 Ionic Zip
using Ionic.Zip; using System; using System.Collections.Generic; using System.IO; using System.Linq; ...
- MuPAD使用总结
MuPAD使用总结 一.打开notebook界面的方法: 二.notebook界面的三种区域 (一).输入区域 输入区域在打开来的时候就有,就是,但是之后如果还想再加,可以点击上方红色框内的图标. 这 ...
- pycharm2018.2.1破解、汉化
##我只是一个搬运工 -_- (一)先破解,破解教程直接给个网址吧,感谢各位大神的无私奉献:https://blog.csdn.net/u014044812/article/details/78 ...
- 使用localstorage.setItem()存储对象
使用localstorage.setItem(name,value)存储JSON对象时会发现浏览器存储的内容为[object,object],并不是我们想要的内容,这是因为我们在存储的时候没有进行类型 ...
- D3.js的v5版本入门教程(第十一章)——交互式操作
D3.js的v5版本入门教程(第十一章) 与图形进行交互操作是很重要的!所谓的交互操作也就是为图形元素添加监听事件,比如说当你鼠标放在某个图形元素上面的时候,就会显示相应的文字,而当鼠标移开后,文字就 ...
- 作业——12 hadoop大作业
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 Hadoop综合大作业 1.以下是爬虫大作业产生的csv文件 ...
- flowable表简要说明
1. Flowable数据库表命名规则 ACT_RE_* ’RE’表示repository(存储).RepositoryService接口操作的表.带此前缀的表包含的是静态信息,如,流程定义,流程的资 ...