当前位置: 首页 > news >正文

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

【图片】

 【思路解析】

【客户端代码】

 

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.lryc.cn/news/101047.html

相关文章:

  • Java中对Redis的常用操作
  • 链路追踪设计
  • Golang之路---02 基础语法——常量 (包括特殊常量iota)
  • Pytest学习教程_装饰器(二)
  • redis的如何使用
  • MyBatis(二)
  • 【【51单片机AD转换模块】】
  • Longest Divisors Interval(cf)
  • 配置文件、request对象请求方法、Django连接MySQL、Django中的ORM、ORM增删改查字段、ORM增删改查数据
  • CTF学习路线指南(附刷题练习网址)
  • 【Rust 基础篇】Rust默认泛型参数:简化泛型使用
  • 从源码分析Handler面试问题
  • shell编程 变量作用域
  • 华为eNSP:isis的配置
  • FS.05-SAS-UP-Methodology
  • Jmeter并发测试
  • 【JVM】浅看JVM的运行流程和垃圾回收
  • 使用低代码开发,需要注意哪些?
  • 面试总结-Redis篇章(八)——Redis分布式锁
  • 压力测试-商场项目
  • IDEA中文UT方法执行报错问题、wps默认保存格式
  • Vue如何实现编程式导航声明方法,前进和后退导航
  • torch.load 报错 ModuleNotFoundError 或 AttributeError
  • 前端,js , Error in created hook: TypeError ,有bug了
  • 百度文心千帆大模型平台:企业级大模型服务的新航标
  • uniApp低功耗蓝牙一键开门、多对多查找、数组匹配数组、开锁
  • 类和对象|六个默认成员函数|const成员函数|运算符重载
  • 从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
  • 04mysql查询语句之查询与分页02
  • 原型模式——对象的克隆