文章目录

  • 前言
  • 一、客户端
  • 二、服务接受端



前言

传送门——源教程地址:狂神说版文件上传实现


一、客户端

最开始我们可以选择电脑上面的任意张图片拖到Idea中。

java 图象传输 java tcp传输图片_java

新建一个TcpClient类,创建socket连接。只要设计到上传、传输、下载啥的都是和IO流扯上关系的。互联网上的一切东西都离不开流。然而下一步就必须创建一个输出流,接着new一个文件输入流。

代码如下:

//       创建一个socket连接。
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
//        创建一个输出流
        OutputStream os = socket.getOutputStream();
//        读取文件
        FileInputStream fis = new FileInputStream(new File("C:\\Users\\admin\\Desktop\\lesson02\\src\\fdb.jpg"));
//        写出文件

写出文件:

byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }

通知服务器,我已经结束了。

socket.shutdownOutput(); // 我已经结束了,传输完了。

确定服务器接受完毕,才能够断开连接。

InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        while ((len2 = inputStream.read(buffer2)) != -1) {
            baos.write(buffer2, 0, len2);
        }
        System.out.println(baos.toString());

关闭资源。

fis.close();
        inputStream.close();
        baos.close();
        os.close();
        socket.close();

客户端完整代码:

package com.company.LessionStudy;

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

public class TcpClientDemo02 {

    public static void main(String[] args) throws Exception {
//        创建一个socket连接。
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
//        创建一个输出流
        OutputStream os = socket.getOutputStream();
//        读取文件
        FileInputStream fis = new FileInputStream(new File("C:\\Users\\admin\\Desktop\\lesson02\\src\\fdb.jpg"));
//        写出文件
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
//        通知服务器,我已经结束了。
        socket.shutdownOutput(); // 我已经结束了,传输完了。
//        确定服务器接受完毕,才能够断开连接
        InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        while ((len2 = inputStream.read(buffer2)) != -1) {
            baos.write(buffer2, 0, len2);
        }
        System.out.println(baos.toString());
//        关闭资源
        fis.close();
        inputStream.close();
        baos.close();
        os.close();
        socket.close();
    }
}

二、服务接受端

同样的道理,接受图片也需要创建ServerSocket服务端口号设置为9000,调用服务的accept()方法监听客户端的连接。紧接着获取输入流。

文件输出的pathname可以自定义,比如我们的就是receive.jpg自定义命名。那么接受到图片也会默认为此名字。

FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));

最后就是写烂的代码:

byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

最后的最后关闭资源(关流)。
服务器TcpServer类完整代码:

package com.company.LessionStudy;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo02 {
    public static void main(String[] args) throws Exception {
//        创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
//        监听客户端的连接。
        Socket socket = serverSocket.accept();
//        获取输入流。
        InputStream is = socket.getInputStream();
//        文件输出
        FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
//        通知客户端,我接受完毕了,
        OutputStream os = socket.getOutputStream();
        os.write("我接收完毕了,你可以断开了。".getBytes());
//        关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

运行结果:先运行服务器端,再运行客户端。

java 图象传输 java tcp传输图片_java 图象传输_02


java 图象传输 java tcp传输图片_File文件上传_03


java 图象传输 java tcp传输图片_java 图象传输_04

这个世界并不在乎你的自尊,只在乎你做出来的成绩,然后再去强调你的感受。——比尔·盖茨