Java Socket+IO练习2:使用socket传输文件和图片

这篇博客通过两个练习介绍了如何使用Java Socket进行文件和图片的传输。练习1涉及文本文件的传输,强调了在传输文本时使用字符流,如BufferedReader和BufferedWriter,并提醒在处理大文件时注意数据丢失的问题。练习2则扩展到图片的传输,遵循了与文本文件相同的基本步骤。代码示例分别展示了客户端和服务器端的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习1:

1.将一个文本文件由一端传往另一端;

2.文件接收端接收完毕后,告诉发送端接收完毕,并打印接收文件的内容;

3.发送端接收并打印接收端发来的信息.

 

提示:

1. 传输文本文件时,使用字符流;传输非文本文件时,使用字节流;

2. 字符流时建议选择字符缓冲流,BufferedReader、BufferedWriter(PrintWriter功能类似,更加强大,自动写入不需要额外执行flush),因为与Reader/Writer相比,缓冲流将数据写入缓存后一次处理多个数据,而字符流只能单字节处理,读取效率低。

3. 字节流选择同2,也优先选择缓冲流,BufferedInputStream和BufferedOutputStream。注意,即便使用了缓冲流,也需要借助数组byte["数组长度"]来执行读写,因为缓冲流本质也是固定长度的数组(默认8K),文件大小较大时,程序会将超过8k的部分写入硬盘,会造成数据丢失,借助数组byte可以避免该问题。

 

 

代码及说明

创建socket来完成此操作,发送端作为client,接收端作为server

客户端Client代码:

package socket;

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

public class test2Upload {
    //    练习内容:从客户端上传一个文件到服务端
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\install.log");
        if (file.exists())
            upload(file);
        else
            throw new IOException("文件"+file+"不存在.");

    }

    private static void upload(File file) throws IOException {
//        1.创建socket;
        Socket s = new Socket("127.0.0.1",10011);
//        2.创建文件输出流,目的:socket;
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);

//        3.创建文件输入流,选择字符缓存流BufferedReader
//        原因:读取的原文件是字符文件,优先选择字符流
        BufferedReader bufr = new BufferedReader(new FileReader(file));

//        4.开始传输,传完后打印提示;
        String line = null;
        while((line=bufr.readLine())!=null)
            out.println(line);
//        通知客户端传输完毕;
        s.shutdownOutput();
        System.out.println("文件传输完毕");

//        5.创建socket输入流,获取从服务端收到的信息,并打印
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str = bufIn.readLine();
        System.out.println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值