客户端

  1. public class Test2_UpdateClient {
  2. public static void main(String[] args) throws UnknownHostException, IOException {
  3. // 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
  4. File file = getFile();
  5. // 2.发送文件名到服务端
  6. Socket socket = new Socket("127.0.0.1", 12345);
  7. BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  8. PrintStream ps = new PrintStream(socket.getOutputStream());
  9. ps.println(file.getName());
  10. // 6.接收结果, 如果存在给予提示, 程序直接退出
  11. String result = br.readLine(); //读取存在后不存在的结果
  12. if("存在".equals(result)) {
  13. System.out.println("您上传的文件已经存在,请不要重复上传");
  14. socket.close();
  15. return;
  16. }
  17. // 7.如果不存在, 定义FileInputStream读取文件, 写出到网络
  18. FileInputStream fis = new FileInputStream(file);
  19. byte[] arr = new byte[8192];
  20. int len;
  21. while((len = fis.read(arr)) != -1) {
  22. ps.write(arr, 0, len);
  23. }
  24. fis.close();
  25. socket.close();
  26. }
  27. private static File getFile() {
  28. Scanner sc = new Scanner(System.in); //创建键盘录入对象
  29. System.out.println("请输入一个文件路径:");
  30. while(true) {
  31. String line = sc.nextLine();
  32. File file = new File(line);
  33. if(!file.exists()) {
  34. System.out.println("您录入的文件路径不存在,请重新录入:");
  35. }else if(file.isDirectory()) {
  36. System.out.println("您录入的是文件夹路径,请输入一个文件路径:");
  37. }else {
  38. return file;
  39. }
  40. }
  41. }
  42. }

服务端

  1. public class Test2_UpdateServer {
  2. public static void main(String[] args) throws IOException {
  3. //3,建立多线程的服务器
  4. ServerSocket server = new ServerSocket(12345);
  5. System.out.println("服务器启动,绑定12345端口号");
  6. //4.读取文件名
  7. while(true) {
  8. final Socket socket = server.accept(); //接受请求
  9. new Thread() {
  10. public void run() {
  11. try {
  12. InputStream is = socket.getInputStream();
  13. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  14. PrintStream ps = new PrintStream(socket.getOutputStream());
  15. String fileName = br.readLine();
  16. //5.判断文件是否存在, 将结果发回客户端
  17. File dir = new File("update");
  18. dir.mkdir(); //创建文件夹
  19. File file = new File(dir,fileName); //封装成File对象
  20. if(file.exists()) { //如果服务器已经存在这个文件
  21. ps.println("存在"); //将存在写给客户端
  22. socket.close(); //关闭socket
  23. return;
  24. }else {
  25. ps.println("不存在");
  26. }
  27. //8.定义FileOutputStream, 从网络读取数据, 存储到本地
  28. FileOutputStream fos = new FileOutputStream(file);
  29. byte[] arr = new byte[8192];
  30. int len;
  31. while((len = is.read(arr)) != -1) {
  32. fos.write(arr, 0, len);
  33. }
  34. fos.close();
  35. socket.close();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. }.start();
  41. }
  42. }
  43. }
  • 此方法可以使用云服务器当做文件传输方式,需要修改上传方式。可使用web快速选择文件上传目录等。通过IP地址+文件地址访问上传文件

    代码部分参考文档。

TCP--文件上传的更多相关文章

  1. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  2. TCP文件上传实现

    TCP文件上传实现 服务端: package net.study; import java.io.*; import java.net.ServerSocket; import java.net.So ...

  3. QT TCP文件上传服务器

    利用QT做为client端,纯C语言做为server端,利用tcp协议,实现client端向server端传递文件 Linux服务器端 //头文件 #include <stdio.h> # ...

  4. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  5. NetworkComms 文件上传下载和客户端自动升级(非开源)

    演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...

  6. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  7. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. java网络编程(7)——利用tcp实现文件上传

    其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是 ...

  9. Python Socket实现文件上传(TCP协议)

    在TCP协议下通过socket模块实现文件上传 #!/usr/bin/env python # -*- coding: utf-8 -*- # desc: tcp_server_file_upload ...

  10. TCP大文件上传与UDP协议

    一.UCP大文件上传(解决粘包问题) ①客户端 import socket, os, json, struct client = socket.socket() client.connect(('12 ...

随机推荐

  1. XGBoost: 你不能不知的机器学习算法

    XGBoost作为一个非常常用的算法,我觉得很有必要了解一下它的来龙去脉,于是抽空找了一些资料,主要包括陈天奇大佬的论文以及演讲PPT,以及网络上的一些博客文章,今天在这里对这些知识点进行整理归纳,论 ...

  2. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

  3. go-select

    select语句属于条件分支流程控制方法,不过它只能用于通道. select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式或语句. ch1 := make(chan ) ...

  4. Juc1024小半年总结-面试篇

    大家好,我叫Juc 这大概是我时隔2年度多 第一次以分享的形式发的第一篇公众号 今天是2019年10月26 本想在10月24就分享一下 可惜前面两天时间太忙... 很凑巧,今天我出来工作刚好满4个月, ...

  5. jQuery插件图片懒加载lazyload

    来自XXX的前言: 什么是ImageLazyLoad技术 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的 交互.尤其是对于高清晰的图片,占的几M的空间.ImageLazyLoad技术 ...

  6. springboot security+redis+jwt+验证码 登录验证

    概述 基于jwt的token认证方案 验证码 框架的搭建,可以自己根据网上搭建,或者看我博客springboot相关的博客,这边就不做介绍了.验证码生成可以利用Java第三方组件,引入 <dep ...

  7. 后缀数组(SA)

    学习了LRJ神犇的代码.orz. 首先真心建议了解下基数排序!!且要有一定的c++程序经验,否则程序很难看懂. 然后对着下面的程序调试(假装你已经会了算法思想) 弄个一个礼拜一下午就能学会了. 该算法 ...

  8. 百万年薪python之路 -- socket()模块的用法

    socket()模块的用法: import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...

  9. 深入理解JavaScript中的作用域、作用域链和闭包

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qappleh/article/detai ...

  10. HashMap - 类注释

    了解到Java8以后HashMap的实现换了,也看了很多博客一直在向我这个小菜鸡说HashMap的重要.因此我决定洗心革面,好好正视HashMap 基于jdk 8 先从类注释开始入手学习,顺便提高提高 ...