采用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传输文件的更多相关文章

  1. Java使用Socket传输文件遇到的问题(转)

    1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...

  2. Java使用Socket传输文件遇到的问题

    1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...

  3. python socket 传输文件

    推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...

  4. Java 学习笔记 网络编程 使用Socket传输文件 CS模式

    Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...

  5. Python Socket传输文件

    发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一 ...

  6. IOS — 关于Socket传输文件需要自定义延时或者包大小的情况

    1. 首先导入头文件 #include <stdio.h> #include <errno.h> #include <string.h> #include < ...

  7. Linux C++ TCP Socket传输文件或图片实例

    环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服 ...

  8. Java学习笔记——Socket实现文件传输

    我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...

  9. 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天

    由于本篇博文的项目都很简单,所以本次开个特例,本次解析两个项目,但是都很简单的 项目一:用socket实现文件传输 本项目很简单,作为小项目的预热的,前面刚学完socket,这里马上又利用socket ...

随机推荐

  1. FFT版题 [51 Nod 1028] 大数乘法

    题目链接:51 Nod 传送门 数的长度为10510^5105,乘起来后最大长度为2×1052\times10^52×105 由于FFT需要把长度开到222的次幂,所以不能只开到2×1052\time ...

  2. SpringBoot整合JDBC模板

    目录 Grade实体类 public class Grade { private Integer gradeId; private String gradeName; public Grade(){ ...

  3. WinDbg常用命令系列---异常相关操作

    .exr (Display Exception Record) .exr命令显示异常记录的内容. .exr Address .exr -1 参数: Address指定异常记录的地址.如果指定-1作为地 ...

  4. js中forEach,for in,for of循环的用法详解

    一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (var i = 0; i < array.length; i) { console.log(i,a ...

  5. intellij ide调用一个对象所有的set方法

    1.下载地址:https://github.com/yoke233/genSets/releases/download/1.1/genSets.jar 2.plugin 从本地磁盘安装找到jar,并重 ...

  6. [Beta]第六次 Scrum Meeting

    [Beta]第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/14 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 (两人回 ...

  7. 正向代理 & 反向代理 & 透明代理

    正向代理(Forward Proxy) 概述 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正 向代理(forward)是一个位于客户端[用户A]和原始服务器 ...

  8. SSM项目实战 之 Shiro

    目录 Shiro 概述 shiro核心概念 核心类 整体类图 主要概念 Shiro架构 认证 什么是认证 关键对象 使用ini完成认证 认证流程 自定义realm 散列密码 授权 什么是授权 使用in ...

  9. vue+elementui搭建后台管理界面(8 同步/异步获取数据渲染table)

    elementui已经封装好了 el-table 组件,只需要指定 data 数据源即可,因此通常在 vue 实例生命周期的 created 阶段,从数据库获取数据,再将返回的数据绑定到 data 如 ...

  10. Mysql创建测试大量测试数据

    修改mysql配置 max_heap_table_size=4000M innodb_flush_log_at_trx_commit=0sync_binlog=500 创建测试数据库 create d ...