Java 文件传输 (TCP、UDP)

【源码+文档】基于JAVA实现的FTP文件传输工具(包括TCP和UDP实现的客户端和服务端) FTP服务器需求为客户端提供查看文件的功能为客户端提供上传文件的功能为客户端提供下载文件的功能能够接受TCP协议的访问方式能够接受UDP协议的访问方式FTP客户端需求能够从服务器上查看文件能够向服务器上上传文件能够从服务器上下载文件能够通过TCP协议访问服务器能够通过UDP协议访问服务器。 阅读详情

  TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

  UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快

TCP

(客户端)

package TCP;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class TCP_File_Client {
    public static void main(String[] args) {
//        Scanner scan = null;
        InputStream in = null;
        Socket socket = null;

        try {
            /**
             * 1.扫描控制台接收文件路径名
             *   创建一个file引用,指向一个新的File对象,并给文件赋予地址
             */
 //           System.out.println("请输入要传输文件的路径:");
//            scan = new Scanner(System.in);
//            String path = scan.nextLine();
            File file = new File("D:\\test.txt");

            /**
             * 2.判断文件是文本文件而不是文件夹并且路径存在
             *  exists():判断文件是否存在
             *  isFile():判断是不是文件
             */
            if(file.exists() && file.isFile()) {
                System.out.println("开始传输----->");
                /**
                 * 3.创建文件输入流,发送文件
                 *   将文件输入的内容都放在file里面
                 */
                in = new FileInputStream(file);

                /**
                 * Socket 这个类实现客户端套接字(也称为“套接字”)。套接字是两台机器间通信的端点。
                 *
                 * 4.创建客户端套接字
                 */
                socket = new Socket();
                //InetSocketAddress Inets = new InetSocketAddress("127.0.0.1", 12345);

                /**
                 * 5.连接TCP服务器
                 *       确定服务端的IP和端口号
                 */
                //socket.connect(new InetSocketAddress("9f9fw7dm.dongtaiyuming.net", 14667));
                socket.connect(new InetSocketAddress("127.0.0.1", 8899));
                /**
                 * 6.获取到客户端的输出流
                 *   OutputStream     getOutputStream()
                 *                         返回此套接字的输出流。
                 */
                OutputStream out = socket.getOutputStream();

                /**
                 * 7.向服务器发送文件
                 *   自己定义了一个协议来解决粘包现象,获取文件名
                 *   7.1.我们先将文件中的内容读取出来,放到file里面
                 *   7.2.先读文件名  file.getName()
                 *   7.3.将文件名转换成字节  file.getName().getBytes()
                 *   7.4.获取文件名的字节的长度  file.getName().getBytes().length
                 *   7.5.再在文件名长度的后面加上  \r\n 作为标识符
                 */
                // 向服务器发送[文件名字节长度 \r\n]
                out.write((file.getName().getBytes().length + "\r\n").getBytes());
                // 向服务器发送[文件名字节]
                out.write(file.getName().getBytes());
                // 向服务器发送[文件字节长度\r\n]
                out.write((file.length() + "\r\n").getBytes());
                // 向服务器发送[文件字节内容]
                byte[] data = new byte[1024];
                int i = 0;
                /*while((i = in.read(data)) != -1) {
                    out.write(data, 0, i);
                }*/
                int length = 0;
                long progress = 0;
                while((length = in.read(data, 0, data.length)) != -1) {
                    out.write(data, 0, length);
                    out.flush();
                    progress += length;
                    System.out.print("| " + (100*progress/file.length()) + "% |");
                }
                System.out.println("  ");
            }else {
                System.out.println("文件不存在或者一个文件~~");
            }
        } catch (Exception e) {

            e.printStackTrace();
        }finally {
            /**
             * 关闭Scanner,文件输入流,套接字
             * 套接字装饰了输出流,所以不用关闭输出流
             */
//            if(scan != null) {
//                scan.close();
//            }
            try {
                if(in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                // 强制将输入流置为空
                in = null;
            }
            try {
                if(socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                // 强制释放socket
                socket = null;
            }

        }
        System.out.println("文件传输完毕");
    }
}

服务端:

package TCP;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class TCP_File_Server {
    public static void main(String[] args) throws Exception {
        /**
         * 创建服务端套接字
         */
        ServerSocket ss = new ServerSocket();

        /**
         * 绑定指定端口
         */
        ss.bind(new InetSocketAddress(8899));
        System.out.println("------开始接收文件-------");
        /**
         * 监听并接受客户端socket连接,并返回一个socket
         */

        /**
         * 持续接收客户端发来的信息,并交给线程处理
         */
        while(true) {
            Socket socket = ss.accept();
            new Thread(new UpLoad(socket)).start();
        }
    }
}

class UpLoad implements Runnable{

    private Socket socket = null;

    public UpLoad(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        OutputStream out = null;
        try {
            // 创建文件输入流,接收客户端的socket中的文件流
            InputStream in = socket.getInputStream();
            /**
             * 获取文件名长度
             * 文件格式:文件名长度(数字)\r\文件名\r\n文件内容\r\n
             * 获取文件名 - 读到第一个回车换行之前 截取出文件名的长度 接着读取这个长度的字节 就是文件名
             * 读取数据 直到遇到第一个回车换行
             * 每次从流中读取一个字节 转成字符串 拼到line上 只要line还不是\r\n结尾 就重复这个过程
             */
            String line1 = "";
            byte[] by1 = new byte[1];
            while(!line1.endsWith("\r\n")) {
                in.read(by1);
                String str = new String(by1);
                line1 += str;
            }
            /**
             * 1.读到长度,去掉\r\n就是文件名字的长度
             * 2.parseInt():作用是将可分析的字符串转化为整数。
             * 3.substring():返回一个新字符串,它是此字符串的一个子字符串。
             */
            int len1 = Integer.parseInt(line1.substring(0, line1.length() - 2));
            /**
             * 1.读取文件名
             * 2.先创建一个长度和文件名长度相等的字节数组,用来存放文件名
             * 3.read(data):从输入流中读取一定数量的字节,并将其存储在缓冲区数组 data 中
             *      data数组有多大,就在in输入流里面读取多少内容,并将内容存放在data数组里面
             */
            byte[] data = new byte[len1];
            in.read(data);
            String fileName = new String(data);

            // 获取文件内容字节长度
            String line2 = "";
            byte[] by2 = new byte[1];
            while(!line2.endsWith("\r\n")) {
                in.read(by2);
                String str = new String(by2);
                line2 += str;
            }
            int len2 = Integer.parseInt(line2.substring(0, line2.length() - 2));

            // 创建输文件出流,指定文件输出地址
            String path = "D://copy//" + fileName;
            out = new FileOutputStream(path);
            // 获取文件内容字节
            // 流对接
            byte[] by3 = new byte[len2];
            in.read(by3);
            out.write(by3);

            System.out.println("接受到来自"+socket.getInetAddress().getHostAddress()+"上传的文件"+path);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            // 关闭资源
            // 关闭输出流
            try {
                if(out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                out = null;
            }
            // 关闭socket
            try {
                if(socket != null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                socket = null;
            }
        }
    }
}

UDP

(客户端)

package upd;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;

public class FileTransferClient  extends Socket {
    private static final String SERVER_IP = "127.0.0.1"; // 服务端IP
    private static final int SERVER_PORT = 8899; // 服务端端口

    private Socket client;

    private FileInputStream fis;

    private DataOutputStream dos;

    /**
     * 构造函数<br/>
     * 与服务器建立连接
     * @throws Exception
     */
    public FileTransferClient() throws Exception {
        super(SERVER_IP, SERVER_PORT);
        this.client = this;
        System.out.println("Cliect[port:" + client.getLocalPort() + "] 成功连接服务端");
    }

    /**
     * 向服务端传输文件
     * @throws Exception
     */
    public void sendFile() throws Exception {
        try {
            File file = new File("D:\\test.xlsx");
            if(file.exists()) {
                fis = new FileInputStream(file);
                dos = new DataOutputStream(client.getOutputStream());

                // 文件名和长度
                dos.writeUTF(file.getName());
                dos.flush();
                dos.writeLong(file.length());
                dos.flush();

                // 开始传输文件
                System.out.println("======== 开始传输文件 ========");
                byte[] bytes = new byte[1024];
                int length = 0;
                long progress = 0;
                while((length = fis.read(bytes, 0, bytes.length)) != -1) {
                    dos.write(bytes, 0, length);
                    dos.flush();
                    progress += length;
                    System.out.print("| " + (100*progress/file.length()) + "% |");
                }
                System.out.println();
                System.out.println("======== 文件传输成功 ========");
                dos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(fis != null)
                fis.close();
            if(dos != null)
                dos.close();
            client.close();
        }
    }

    /**
     * 入口
     * @param args
     */
    public static void main(String[] args) {
        try {
            FileTransferClient client = new FileTransferClient(); // 启动客户端连接
            client.sendFile(); // 传输文件
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
服务端:
package upd;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.math.RoundingMode;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DecimalFormat;

/**
 * 文件传输Server端<br>
 * 功能说明:
 *
 * @author 大智若愚的小懂
 * @Date 2016年09月01日
 * @version 1.0
 */
public class FileTransferServer extends ServerSocket {

    private static final int SERVER_PORT = 8899; // 服务端端口

    private static DecimalFormat df = null;

    static {
        // 设置数字格式,保留一位有效小数
        df = new DecimalFormat("#0.0");
        df.setRoundingMode(RoundingMode.HALF_UP);
        df.setMinimumFractionDigits(1);
        df.setMaximumFractionDigits(1);
    }

    public FileTransferServer() throws Exception {
        super(SERVER_PORT);
    }

    /**
     * 使用线程处理每个客户端传输的文件
     * @throws Exception
     */
    public void load() throws Exception {
        System.out.println("服务端已启动,等待接收文件......");
        while (true) {
            // server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
            Socket socket = this.accept();
            /**
             * 我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后,
             * 都要先跟当前的客户端通信完之后才能再处理下一个连接请求。 这在并发比较多的情况下会严重影响程序的性能,
             * 为此,我们可以把它改为如下这种异步处理与客户端通信的方式
             */
            // 每接收到一个Socket就建立一个新的线程来处理它
            new Thread(new Task(socket)).start();
        }
    }

    /**
     * 处理客户端传输过来的文件线程类
     */
    class Task implements Runnable {

        private Socket socket;

        private DataInputStream dis;

        private FileOutputStream fos;

        public Task(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
            try {
                dis = new DataInputStream(socket.getInputStream());

                // 文件名和长度
                String fileName = dis.readUTF();
                long fileLength = dis.readLong();
                File directory = new File("D:\\copy");
                if(!directory.exists()) {
                    directory.mkdir();
                }
                File file = new File(directory.getAbsolutePath() + File.separatorChar + fileName);
                fos = new FileOutputStream(file);

                // 开始接收文件
                byte[] bytes = new byte[1024];
                int length = 0;
                while((length = dis.read(bytes, 0, bytes.length)) != -1) {
                    fos.write(bytes, 0, length);
                    fos.flush();
                }
                System.out.println("======== 文件接收成功 [File Name:" + fileName + "] [Size:" + getFormatFileSize(fileLength) + "] ========");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if(fos != null)
                        fos.close();
                    if(dis != null)
                        dis.close();
                    socket.close();
                } catch (Exception e) {}
            }
        }
    }

    /**
     * 格式化文件大小
     * @param length
     * @return
     */
    private String getFormatFileSize(long length) {
        double size = ((double) length) / (1 << 30);
        if(size >= 1) {
            return df.format(size) + "GB";
        }
        size = ((double) length) / (1 << 20);
        if(size >= 1) {
            return df.format(size) + "MB";
        }
        size = ((double) length) / (1 << 10);
        if(size >= 1) {
            return df.format(size) + "KB";
        }
        return length + "B";
    }

    /**
     * 入口
     * @param args
     */
    public static void main(String[] args) {
        try {
            FileTransferServer server = new FileTransferServer(); // 启动服务端
            server.load();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

传输时先启动服务端

 

Java 使用 TCP 和 UDP 传输文件 阅读详情

相关推荐

Java网络编程:TCP与UDP通信实践

UDP多播允许一台主机发送数据到多个接收者,这种方式对那些需要向多个目的地发送相同数据的应用程序(如视频广播、在线游戏)非常有用。在Java中,可以通过类来实现多播通信。使用多播时,需要选择一个或多播组地址,并将多个接收者加入到这个多播组。下面的代码展示了如何加入一个多播组并发送一个多播消息:try {// 创建一个MulticastSocket实例// 指定多播组地址// 加入多播组// 创建要发送的多播消息。

weixin_34945060的博客 869

Java 简单TCP文件传输

服务端 package TCP; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Ser...

weixin_30735391的博客 533

ROS2+MoveIt2+Gazebo仿真实战:从零搭建六轴机械臂控制闭环

本文详细介绍了如何从零搭建一个完整的ROS2+MoveIt2+Gazebo六轴机械臂仿真控制闭环。通过手写URDF模型、配置MoveIt2运动规划、集成Gazebo物理仿真与ROS2 Control控制器,最终实现RViz中规划轨迹、Gazebo中同步执行的完整数字孪生验证平台,为机器人算法开发和硬件验证提供低成本、高效的仿真解决方案。

weixin_29093017的博客 486

java编写实现网络文件传输功能

package com.softeem.fileserver; import java.io.File; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * 服务器 */ public class Server { public static void main...

TeaLeafEgg的博客 9515

ArcGIS供地图斑图形及属性入库操作(附练习数据)

已知数据: 供地图斑位置图。 供地图斑表格 成果要求:将供地图斑导入mdb数据库并将供地图斑表格的属性进行挂接。 接下来我们开始操作: 1、 打开arcmap,在目录内连接的文件夹内找到供地图斑位置图。图片 2、 将annotation和polygon添加到arcmap图片 3、 右击文件所在文件夹新建mdb数据库图片 4、 右击数据库新建要素数据集。(要素数据集非常重要,稍后所有操作都在数据集内进行)选择图斑投影方式及代号。图片 5、 右击要素数据集—导入(将图层内的数据导入数据库)图片 6、 数据导入.

qq_43173805的博客 8132

手把手教你用开源EtherCAT协议栈SOEM开发从站设备(附避坑指南)

本文详细介绍了如何使用开源EtherCAT从站协议栈SOES进行嵌入式设备开发。内容涵盖从环境搭建、硬件准备到核心的对象字典与PDO映射配置,并重点分享了主循环集成、状态机处理以及实战调试中的常见问题与避坑指南,旨在帮助开发者高效实现设备接入工业现场总线网络。

linux的博客 630

java使用TCP编程实现文件的传输,在文件传输结束后,client端需要额外传输一句话,表示文件传输完成,服务器端接收到这句话之后,停止接收client端发送的数据

要求:1.使用TCP编程实现文件的传输 2. 在文件传输结束后,client端需要额外传输一句话,表示文件传 输完成, 3.服务器端接收到这句话之后,停止接收client端发送的数据

有点儿文绉绉的小赖的博客 1326

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 311

pdf转word python_Python实现PDF转Word

”阅读此篇需要三分钟“首先来看看来个PDF文件我们来选择其中一个论文摘要:使用我们的python代码转化后:是不是很神奇?现在网络上大部分的PDF转Word都是收费的,基本都是按页收费,有了我们的python代码后,我们就可以完全免费的将PDF转成Word了,这么好的福利我们赶紧来了解一下吧!首先来看看我们要安装一些什么模块:attrs==17.4.0lxml==4.1.1pdfminer3k==...

weixin_39614109的博客 692

记一次Nacos线程数飙升排查

Nacos线程飙升问题排查

叭嘣的博客 2632

Jetson AGX Orin和Drive AGX Orin相机的关联分析和编程指南

通过适当的相机接口和连接,以及使用适当的软件开发环境,开发人员可以在这些平台上实现相机功能。Jetson AGX Orin和Drive AGX Orin是NVIDIA推出的两款强大的计算平台,用于自动驾驶和人工智能应用。Jetson AGX Orin和Drive AGX Orin平台提供了强大的计算能力,使开发人员能够实现复杂的相机功能和算法。以上只是一些示例,Jetson AGX Orin和Drive AGX Orin平台提供了丰富的开发资源和工具,可用于实现各种复杂的相机应用。显示图像在一个窗口中。

CyberLynxO的博客 1122

Java 复制大文件方式FileChannel 用法

目前为止,我们已经学习了很多 Java 拷贝文件的方式,除了 FileChannel 提供的方法外,还包括使用 Files.copy() 或使用字节数组的缓冲/非缓冲流。那个才是最好的选择呢?这个问题很难回答,因为答案基于很多因素。本文将目光集中到一个因素,那就是速度,因为拷贝任务 越快将会提高效率,在有些情况下,这是成功的关键。因此,本文将使用一个应用程序来比较下面这些拷贝方式的具体时间:

路在脚下 6066

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】持续更新,建议收藏

IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】 导读:行测、综合知识、英语和性格测试。综合知识,包括货币学、金融、会计、计算机等内容。  行政能力测试,内容大家可以参考公务员考试,包括逻辑推理、数字推理、图形推理、文字推理。英语测试,包括语法和词汇30题、完型填空20题、10篇阅读理解50题,阅读理解文章特别长,生词特别多。 (1)、英语可以Ctrl+F...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2万+

tcp udp实现文件传输(java)

tcp    package org.tcp;import java.io.BufferedInputStream;   import java.io.DataInputStream;   import java.io.DataOutputStream;   import java.io.File;   import java.io.FileInputStream;   imp

real14 1074

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 92

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java ftp api文档_课内资源 - 基于JAVA实现的FTP文件传输工具(包括TCP和UDP实现的客户端和服务端)...

1.系统概述1.1 业务背景FTP服务提供了对文件传输的支持,对FTP文件传输服务的需求是本程序的背景,当然现在已经有很多FTP的很好的实现,本程序也不可能说做得比知名的那些要好,在这里程序的目的是为了锻炼网络程序设计与实践和软件系统设计与开发实践能力。1.2 总体目标实现一个FTP服务,能够在客户端和服务器端查看和传输文件,使用TCP和UDP两种协议方式进行实现,最后会提供一个FTP服务器、一个...

weixin_39879122的博客 313

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

‌Java实现文件传输:TCP可靠传输与UDP快速传输对比

TCP额外开销: $$T_{tcp} = T_{total} + N \times T_{ack}$$ UDP风险模型: $$P_{loss} = 1 - (1 - p)^N$$ $p$ 为单包丢失率,$N$ 为分包数量。:大型文件传输可采用TCP分块传输,结合$MD5$校验确保完整性;实时流媒体可在UDP基础上实现前向纠错($FEC$)机制。:内置重传机制、数据校验和、按序交付。:无连接、无重传、最大传输单元限制。

2501_93895450的博客 375

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java网络多线程专题 - TCP UDP Socket编程 多线程 并发处理 文件传输 新闻推送

1.网络的相关概念 1.1 网络通信 1.2 网络 1.3 Ip地址 1.4 ipV4地址分类 1.5 域名和端口号 1.6 网络通信协议 1.7 TCP协议 和 UDP协议 1.7.1TCP协议 1.7.2UDP协议 2.网络编程常用的API工具类 2.1 InetAddress类 .........

qq_52095438的博客 302

JavaDay21 tcp三次握手、tcp和udp协议的区别、交互图片的练习

1. 简述TCP的三次握手。 TCP的三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。 (1)第一次握手,客户端向服务器端发出连接请求,等待服务器确认; (2)第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求; (3)第三次握手,客户端再次向服务器端发送确认信息,确认连接。 完成上述的三次握手后,客户端和服务器端的连接就已经建立了,每次连接的创建都需要经过“三次握手”的过程。 2. TCP协议和UDP协议的区别。 UDP(用户数据报协议): (

应付就业 ·· 规划职业? 198

java实现TCP与UDP混合传输文件总结

fj_ding的专栏 210

Java中UDP和TCP的使用(简单介绍和示例)

UDP通信程序是基于UDP协议实现的网络通信程序。

岛森年的博客 1397

基于JAVA实现的FTP文件传输工具(包括TCP和UDP实现的客户端和服务端)

1.系统概述1.1 业务背景FTP服务提供了对文件传输的支持,对FTP文件传输服务的需求是本程序的背景,当然现在已经有很多FTP的很好的实现,本程序也不可能说做得比知名的那些要好,在这里程序的目的是为了锻炼网络程序设计与实践和软件系统设计与开发实践能力。1.2 总体目标实现一个FTP服务,能够在客户端和服务器端查看和传输文件,使用TCP和UDP两种协议方式...

qq_38474871的博客 646

Java SE基础(二十二)UDP和TCP

本章节讲述Java SE的UDP与TCP

虎鲸不是鱼 1476

Java基础_18 | Java中网络通信程序的设计(url爬虫,TCP/UDP socket程序,socket文件传输程序)

1. Java中的网络通信程序包 Java提供网络通信功能的包是java.net包,提供的网络功能有三大类: URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据; Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道; Datagram是更低级的网络传输方式,它把数据的目的记录在数据包中,然后直接放在网络上; 本文主要讲述前两种...

Mculover666的博客(嵌入式) 1267

JAVA中TCP和UDP传输例子的对比

在本文中我将学到的java中的UDP和TCP在局域网内的传输做了对比,这里强调 的是局域网范围内,非广域网。首先,下面的是我写的在局域网内利用java中的UDP协议写的一个传输文件或者图片的类。 -----------------------------------------------------------------------------------------------------...

weixin_30929295的博客 87
上一篇: SpringBoot + Spring Cloud +Vue 管理系统后台搭建(十七、配置中心Config、Bus)
下一篇: Java发送Http请求 传参和接收
Java程序之猿
博客等级 码龄9年 2599粉丝 140原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值