采用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. Linux端口转发工具rinetd

    介绍:Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具.Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址 ...

  2. 三.Python变量,常量,注释

    1. 运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码python d:t1.py 您已经 ...

  3. java实现ssh登录linux服务器并下发命令

    依赖jar包:jsch-0.1.55.jar   commons-io-2.5.jar import com.jcraft.jsch.ChannelExec; import com.jcraft.js ...

  4. H5如何实现关闭当前页面,跳转到新页面?

    小程序有此功能的跳转方法. 那么H5如何实现该功能?  很简单. location.replace('new.html')  这个方法可以实现 关闭当前页面,跳转到新页面 的效果. 而   windo ...

  5. 虚拟变量和独热编码的区别(Difference of Dummy Variable & One Hot Encoding)

    在<定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)>一文中,我们可以看到虚拟变量(Dummy Var ...

  6. kafka-python 1.4.6 版本触发的一个 rebalance 问题

    在使用了最新版的 kafka-python 1.4.6 在 broker 对 topic 进行默认配置的情况下报出类似错误 CommitFailedError CommitFailedError: C ...

  7. Mysql 之根据经纬度按距离排序

    一.方式一 st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米. SELECT *, (st_distance(point(lng,l ...

  8. vue+Element 后台管理骨架

    1.使用的是vue-cli 3.0起的 2.文件目录结构 3.整体的骨架是根据element 文档里头的Container容器布局来的(复制粘贴,喜欢什么色儿就改) aside这个 部分需要注意的是这 ...

  9. idea的maven工程中修改pom会改变项目jdk版本

    解决办法 方案一 //pom中配置maven插件时候 <plugins> <!--jdk编译插件--> <plugin> <groupId>org.ap ...

  10. Http项目转Https项目

    Https证书准备 开发环境下,可直接用JDK自带的keytool工具生成一个证书,正式环境可购买一个,配置过程是一样的: 打开cmd命令行,输入以下命令: 命令解释: -alias 证书别名 -ke ...