使用socket上传文件(经典珍藏版)

该博客展示了如何使用Java的TCP套接字进行文件传输。客户端通过FileInputStream读取本地文件,并通过Socket的OutputStream发送到服务端。服务端接收数据并用FileOutputStream将接收到的内容写入硬盘。整个过程实现了文件从客户端到服务端的完整传输。
摘要由CSDN通过智能技术生成

1客户端:使用FileInputStream把文件读到内存,使用socket的OutputStream发送文件到ServerSocket服务端

package facepeople.tcp;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ClientTcp {
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream("a.jpg");

            Socket socketClient = new Socket("localhost", 6668);
            OutputStream outputStream = socketClient.getOutputStream();
            byte[] bytes1 = new byte[10 * 1024];
            int length1;
            while ((length1=fileInputStream.read(bytes1))!=-1){
                outputStream.write(bytes1,0,length1);
            }
            socketClient.shutdownOutput();
            System.out.println("文件发送完毕" );



//            解析服务端回写的数
            InputStream inputStream = socketClient.getInputStream();
            int length;
            byte[] bytes = new byte[1024];
            while ((length=inputStream.read(bytes))!=-1){
                System.out.println("服务端传来的数据--> " + new String(bytes,0,length));
            }
            fileInputStream.close();
            inputStream.close();
            outputStream.close();
            socketClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2服务端:使用ServerSocket的InputStream获取到客户端传来的数据,使用FileOutputStream写到服务端的硬盘上。

package facepeople.tcp;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class ServiceTcp {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(6668);
            Socket acceptSocket = serverSocket.accept();
            InputStream inputStream = acceptSocket.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream("a3.jpg");
            int length;
            byte[] bytes = new byte[10*1024];
//            length=inputStream.read(bytes);
            while ((length=inputStream.read(bytes))!=-1){
                System.out.println("客户端传来的数据 = "+length  );
//                System.out.println("客户端传来的数据 = " +new String(bytes,0,length) );
                fileOutputStream.write(bytes,0,length);
            }
//            服务端回写数据
            OutputStream outputStream = acceptSocket.getOutputStream();
            outputStream.write("客户端你好,服务端文件已保存".getBytes(StandardCharsets.UTF_8));
            outputStream.close();
            inputStream.close();
            serverSocket.close();
        } catch (IOException e) {
            System.out.println("e = " + e.getMessage());
            e.printStackTrace();
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值