/*** 需求:将指定文件从D盘目录d:\1下移动到d:\2下* @param args* @throws IOException*/
public static void main(String[] args) throws IOException {//1. 建立输入流和输出流FileInputStream fis = new FileInputStream("d:\\1\\1.png");      //源为d盘1目录下文件1.pngFileOutputStream fos = new FileOutputStream("d:\\2\\2.png");    //目的为d盘2目录下文件2.png//2. 使用自定义缓冲区将输入流和输出流关联起来byte[] buf = new byte[1024];                                    // 定义1024byte的缓冲区int len = 0;                                                  // 输入流读到缓冲区中的长度//3. 将数据从输入流循环读入缓冲区, 当读到文件最后,会得到值-1while((len=fis.read(buf))!=-1){fos.write(buf,0,len);                                     //将读到长度部分写入输出流}//4. 关闭流fis.close();fos.close();
}
  • 客户端发数据到服务端

/** TCP传输,客户端建立的过程* 1,创建TCP客户端Socket服务,使用的是Socket对象。*         建议该对象一创建就明确目的地。要连接的主机。* 2,如果连接建立成功,说明数据传输通道已建立。*         该通道就是Socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。* 3,使用输出流,将数据写出。* 4,关闭资源。*/
// 建立客户端Socket
Socket s = new Socket(InetAddress.getLocalHost(), 9003);
// 获得输出流
OutputStream out = s.getOutputStream();
// 获得输入流
FileInputStream fis = new FileInputStream("d:\\1\\1.png");
// 发送文件信息
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {// 写入到Socket输出流out.write(buf, 0, len);
}
s.shutdownOutput();
// 关流
out.close();
fis.close();
s.close();
  • 服务端
ServerSocket ss = new ServerSocket(9003);// 需要指定端口,客户端与服务端相同,一般在1000-65535之间
//服务端一般一直开启来接收客户端的信息。
while (true) {// 获取客户端SocketSocket s = ss.accept();// 获取输入流与输出流InputStream in = s.getInputStream();// 输入流FileOutputStream fos = new FileOutputStream("d:\\3\\3.png");// 创建缓冲区关联输入流与输出流byte[] buf = new byte[1024];int len = 0;// 数据的写入while ((len = in.read(buf)) != -1) {fos.write(buf, 0, len);}// 关流fos.close();s.close();
}

完整代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {public static void main(String[] args) throws UnknownHostException, IOException {/** 客户端先向服务端发送一个文件名,服务端接收到后给客户端一个反馈,然后客户端开始发送文件*///建立客户端SocketSocket s = new Socket(InetAddress.getLocalHost(), 9001);//修改为服务器IP地址//获得输出流OutputStream out = s.getOutputStream();//关联发送文件File file = new File("D:\\1.png");String name = file.getName();//获取文件完整名称String[] fileName = name.split("\\.");//将文件名按照.来分割,因为.是正则表达式中的特殊字符,因此需要转义String fileLast = fileName[fileName.length-1];//后缀名//写入信息到输出流out.write(name.getBytes());//读取服务端的反馈信息InputStream in = s.getInputStream();byte[] names = new byte[50];int len = in.read(names);String nameIn = new String(names, 0, len);if(!fileLast.equals(nameIn)){//结束输出,并结束当前线程s.close();System.exit(1);}//如果正确,则发送文件信息//读取文件信息FileInputStream fr = new FileInputStream(file);//发送文件信息byte[] buf = new byte[1024];while((len=fr.read(buf))!=-1){//写入到Socket输出流out.write(buf,0,len);}//关流out.close();fr.close();s.close();}
}
  • 服务端 任务类
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class Task implements Runnable {private Socket s;public Task(Socket s){this.s = s;}@Overridepublic void run() {String ip = s.getInetAddress().getHostAddress();try{//获取客户端输入流InputStream in = s.getInputStream();//读取信息byte[] names = new byte[100];int len = in.read(names);String fileName = new String(names, 0, len);String[] fileNames = fileName.split("\\.");String fileLast = fileNames[fileNames.length-1];//然后将后缀名发给客户端OutputStream out = s.getOutputStream();out.write(fileLast.getBytes());//新建文件File dir = new File("d:\\server\\"+ip);if(!dir.exists())dir.mkdirs();File file = new File(dir,fileNames[0]+"."+fileLast);FileOutputStream fos = new FileOutputStream(file);//将Socket输入流中的信息读入到文件byte[] bufIn = new byte[1024];while((len = in.read(bufIn))!=-1){//写入文件fos.write(bufIn, 0, len);}fos.close();s.close();}catch(Exception e){e.printStackTrace();}}
}
  • 服务器类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {/** 服务端先接收客户端传过来的信息,然后向客户端发送接收成功,新建文件,接收客户端信息*///建立服务端ServerSocket ss = new ServerSocket(9001);//客户端端口需要与服务端一致while(true){//获取客户端SocketSocket s = ss.accept();new Thread(new Task(s)).start();}}
}

java实现TCP协议文件传输相关推荐

  1. Java利用TCP进行文件的传输

    采用TCP进行通讯,需要服务器和客户端两个部分,因此程序包含SendFileServer.java和SendFileClient.java两个部分. 两个文件的IP,端口都在程序中指定 传输的文件路径 ...

  2. 在Java中实现SFTP协议文件传输的两种解决方案

    在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...

  3. 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?

    [转]使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? Posted on 2008-06-11 15:24 路缘 阅读(3868) 评论(0) 编辑 收藏  http://www.cnbl ...

  4. 使用TCP协议连续传输大量数据时,是否会丢包,应如何避免

    使用TCP协议连续传输大量数据时,是否会丢包,应如何避免 这个问题看看似比较容易,但很多人有不同的理解.开发中遇到是否每包(包数据可能大于1460)发送完之后需要由server->client确 ...

  5. c++网络编程——用TCP实现文件传输(windows下基于VS2017)

    c++网络编程--用TCP实现文件传输 定义文件传输协议 服务端代码 客户端代码 测试 文件传输协议FTP是基于TCP协议实现的,为了体验这个过程,本文自定义一个简单的文件传输协议,并基于TCP协议编 ...

  6. C#项目实战——YModem协议文件传输【实例】

    『你真的,不打算用自己喜欢的方式去过这一生吗?』-- 网络 你要是喜欢犯罪那还是隐忍吧. 今天学习用YModem协议实现固件下载. YModem协议文件传输 YMODEM协议是一个文件传输协议,由Ch ...

  7. TCP协议在传输实时语音流方面的优点

    1. 可靠性高:TCP协议通过确认机制和重传机制保证数据的可靠性,能够保证语音数据的完整性和准确性. 2. 顺序性好:TCP协议能够保证数据的顺序性,能够确保语音数据按照发送顺序被接收. 3. 流量控 ...

  8. 【TCP实现文件传输 --文件上传和下载】

    TCP实现文件传输 客户端 服务器 测试 查看服务器目录文件 下载文件 上传文件 小结 客户端 #include <stdio.h> #include <sys/types.h> ...

  9. 全网疯传!Java利用TCP协议实现客户端与服务器通信【附通信源码

    目录 TCP协议概念 ServerSocket类 服务器端程序 客户端程序 Hello!大家好哇!我是灰小猿! 上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP.TCP.UDP以及端口和套 ...

最新文章

  1. 如何实现后台向前台传数据
  2. 分享Kali Linux 2016.2第48周虚拟机
  3. leetcode132. 分割回文串 II(dp)
  4. 入门干货:Python操作Word文件经验分享
  5. 关于计算机的英语作文八百字,小学英语作文800字(精选10篇)
  6. delphi学习路线
  7. python api调用 验证码_Python调用创蓝253短信验证码API文档
  8. 会计考计算机哪些知识,2017会计从业考试《会计电算化》考点之计算机网络基本知识...
  9. ORM框架之Mybatis(二)数据库连接池、事务及动态SQL
  10. Python删除文件第一行
  11. python模拟三次输入密码_python 3.0 模拟用户登录功能并实现三次错误锁定
  12. 嵌入式C语言入门操作
  13. 复习笔记——物联网通信技术判断
  14. html5页面的dtd定义是,DTD的作用
  15. 数据中心安全域的设计和划分
  16. 微信小程序showToast在真机中显示时间不可控制,显示时间短
  17. c语言double型小数点后几位小数,c语言double类型默认输出几位小数?
  18. 二分 1238:一元三次方程求解
  19. 数据结构题及c语言版答案第七章,数据结构第七章习题答案
  20. shell 判断网线插拔_shell脚本自动检测网络掉线和自动重连

热门文章

  1. 在VScode中创建Java项目
  2. C语言编写的判断素数的程序
  3. 同相放大电路电阻热噪声分析的一些思考
  4. java 后台开发流程
  5. VS中DLL的导出宏的定义和头文件的位置导致的两类编译错误总结
  6. Windows下CMake安装使用
  7. Jquery重新学习之二[属性attr(),removeAttr(),prop(),removeProp()]
  8. 从 Slack IPO 我们能学到什么?
  9. Vue3+Element-Plus 实现左侧菜单折叠与展开功能 二七
  10. 一款英文文章阅读翻译精品工具