TCP网络通信编程之网络上传文件

news2024/9/28 1:15:39

【图片】

 【思路解析】

【客户端代码】

 

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @ProjectName: Study
 * @FileName: TCPFileUploadClient
 * @author:HWJ
 * @Data: 2023/7/29 18:44
 */
public class TCPFileUploadClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
        System.out.println("连接成功...");

        // 这里采用边从数据通道中读取文件信息,边往新文件中写入数据的操作
        String filePath = "e:\\qie.png";
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
        byte[] bytes = new byte[1024];
        int readSize = 0;
        BufferedOutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());
        while ((readSize = bufferedInputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, readSize);
        }
        outputStream.flush();
        socket.shutdownOutput();

        // 这里使用字符流读入
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String s = reader.readLine(); // 因为使用了writer.newLine来作为结束标记,所以这里一定要使用readLine来读取
        System.out.println(s);

        // 一定要关闭所有流对象和网络对象
        reader.close();
        bufferedInputStream.close();
        socket.close();
        outputStream.close();
        System.out.println("客户端退出...");

    }
}

【服务端代码】

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @ProjectName: Study
 * @FileName: TCPFileUploadServer
 * @author:HWJ
 * @Data: 2023/7/29 18:44
 */
public class TCPFileUploadServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket( 8888);
        System.out.println("服务端,在端口8888,等待连接...");
        // 等待连接
        Socket socket = serverSocket.accept();

        // 这里采用边读取文件信息边往数据通道写入信息的操作
        String newFile = "src\\new.png";
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(newFile));
        BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = new byte[1024];
        int readSize = 0;
        while ((readSize = inputStream.read(bytes)) != -1){
            outputStream.write(bytes, 0, readSize);
        }

        // 这里发送的是汉字,所以采用字符流传输
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedWriter.write("成功收到图片");
        bufferedWriter.newLine();
        bufferedWriter.flush(); // 这里一定要使用flush刷新,来确保数据被写入到数据通道中

        // 一定要关闭所有流对象和网络对象
        outputStream.close();
        bufferedWriter.close();
        inputStream.close();
        serverSocket.close();
        socket.close();
        System.out.println("服务端退出...");
    }
}

【结果展示】

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决在云服务器开放端口号以后telnet还是无法连接的问题

这里用阿里云服务器举例,在安全组开放了对应的TCP端口以后。使用windows的cmd下的telnet命令,还是无法正常连接。 telnet IP地址 端口号解决方法1: 在轻量服务器控制台的防火墙规则中添加放行端口。 阿里云-管理防火墙 如图,开放…

Windows 11 下 OpenFace 2.2.0 的安装

写在前面 最近需要做关于面部的东西,所以需要使用到OpenFace这个工具,本文仅用来记录本人安装过程以供后续复现,如果可以帮助到读者也是非常荣幸。 安装过程 不编译直接使用 这种方法可以直接从官方下载下来编译好的exe以及gui进行使用&a…

1000Wqps生产级IM,怎么架构?

前言 在40岁老架构师 尼恩的读者社区(50)中,很多小伙伴拿高薪,完成架构的升级,进入架构师赛道,打开薪酬天花板。 然后,在架构师的面试过程中,常常会遇到IM架构的问题: 如果要你从0到1做IM架构…

python与深度学习(十):CNN和cifar10二

目录 1. 说明2. cifar10的CNN模型测试2.1 导入相关库2.2 加载数据和模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章训练的模型进行测试。首…

Flutter 使用texture_rgba_renderer实现桌面端渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频(本…

MySQL高级篇第3章(用户与权限管理)

文章目录 1、用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其他用户密码1.7 MySQL8密码管理 2、权限管理2.1 全新列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 3、权限表3.1 user表3.2 db表3.3 tables_priv表…

ssti总结转载

一、初识SSTI 1、什么是SSTI? SSTI就是服务器端模板注入(Server-Side Template Injection),实际上也是一种注入漏洞。 可能SSTI对大家而言不是很熟悉,但是相信大家很熟悉SQL注入。实际上这两者的思路都是相同的,因此可以类比来分…

【嵌入式Linux系统开发】——系统移植概述

目录 🍉🍉一、什么是嵌入式系统 🍉🍉二、嵌入式系统操作 🍉🍉三、嵌入式Linux的特点 🍉🍉四、嵌入式系统的组成 1、硬件和软件 2、硬件层 3、中间层 4、软件层 5、 功能层与执…

手动创建一张“资产负债表”和“利润表”

1. 前言 了解了“复式记账法”,以及“增值税”等概念后,让我们通过一个简化的例子,来手动创建一张资产负债表和利润表,进而加深对于记账和这两种报表的理解。 2. 手动创建财务报表 2.1 期初余额 假设某公司的2022年度期初余额…

找不到vcruntime140.dll无法继续执行代码怎么办?(详解)

1.vcruntime140.dll是什么?有什么作用? vcruntime140.dll是Windows操作系统中的一个动态链接库文件,它属于Microsoft Visual C Redistributable的一部分。DLL是Dynamic Link Library的缩写,它包含了一系列函数和资源,…

C计数问题---2023河南萌新联赛第(三)场:郑州大学

解析&#xff1a; n 可以分成两个数&#xff0c;记录每个数的因子对数&#xff0c;乘起来即可。 注意当因子相同时&#xff0c;只1 #include<bits/stdc.h> using namespace std; int n,res; int main(){cin>>n;for(int i1;i<n;i){int xi,yn-i;int cnt10,cnt20;…

【周末闲谈】剑指offer,了解面试,学会面试

我们在找工作时&#xff0c;需要结合自己的现状&#xff0c;针对意向企业做好充分准备。作为程序员&#xff0c;你有哪些面试IT技术岗的技巧&#xff1f; 你可以从一下几个方向谈谈你的想法和观点。 个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️…

DHCP中继代理原理(第二十八课)

当客户机和DHCP服务器不在一个广播域时,DHCP服务器无法接收到客户机的DHCP discover广播数据包,客户机就无法获得IP地址 第一步配置DHCP服务器的信息 <Huawei>u t m //清除日志 Info: Current terminal monitor is off. <Huawei>sys [Huawei]sysname DHCP-R…

RBAC三级菜单实现(从前端到后端)未完待续

1、菜单设计 2、前端路由 根据不同的用户id显示不同的菜单 一个是找 一个是路由 3、多级菜单 展示所有权限&#xff0c;并且根据当前用户id展示它所属的角色的所有菜单。 前端树状展示 太牛逼了&#xff01; 思路&#xff1a; 后端&#xff1a;传给前端map&#xff0…

Android AIDL 使用

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnAIDL代码&#xff1a;AIDLClient. 参考文献 安卓开发学习之AIDL的使用android进阶-AIDL的基本使用Android AIDL 使用使用 AIDL …

Matlab Image Processing toolbox 下载安装方法

当安装好Matlab之后&#xff0c;发现没有Image Processing toolbox这个图像处理工具箱 从新安装一遍&#xff0c; 选上 Image Processing toolbox 但是不用选matlab即可 1.找到之前安装时的Setup安装程序包&#xff0c;按照之前安装Matlab步骤&#xff0c;到选择需要安装的Ma…

基于FasterRCNN深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................................... % 训练Faster R-…

儿童居家健身好伙伴,小莫计数摸高训练器

现在的孩子们的越来越不喜欢运动了&#xff0c;总是爱玩手机游戏&#xff0c;对他们的身体健康非常不好&#xff0c;作为家长&#xff0c;我们希望能够给孩子提供更多的运动机会&#xff0c;有必要每天准备一些能让他们活动活动手脚的小游戏&#xff0c;让他们每天有足够的运动…

初阶C语言-函数(上)

“追光的人&#xff0c;终会光芒万丈&#xff01;” 今天我们一起来学习一下函数的相关知识点。 函数 1.函数是什么&#xff1f;2.C语言中函数的分类2.1库函数2.2自定义函数 3.函数的参数3.1实际参数&#xff08;实参&#xff09;3.2形式参数&#xff08;形参&#xff09; 4.函…

网络层中一些零碎且易忘的知识点

异构网络&#xff1a;指传输介质、数据编码方式、链路控制协议以及数据单元格式和转发机制不同&#xff0c;异构即物理层和数据链路层均不同RIP、OSPF、BGP分别是哪一层的协议&#xff1a; -RIPOSPFBGP所属层次应用层网络层应用层封装在什么协议中UDPIPTCP 一个主机可以有多个I…