栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java TCP 网络通信编程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java TCP 网络通信编程

Java C-S 模式实现文件的网络传输,从客户端发送文件到服务器端,服务器端接收文件下载保存到本地并反馈消息给客户端。

  • 客户端:
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;


public class FileSendClient {
    public static void main(String[] args) {
        Socket socket = null;
        InputStream inputStream = null;
        OutputStream outputStream = null;
        BufferedReader bufferedReader = null;
        BufferedInputStream bufferedInputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;

        try {
            // 读取到的字节数
            int readLen;
            // 文件大小
            int fileSize = 0;
            // 字节缓冲数组,加快文件读取速度
            byte[] buffer = new byte[1024];
            // 文件路径
            File filePath = new File("C:\Users\Admin\Desktop\BeFree.jpg");
            // 创建字节输出流,保存从文件读取到的二进制数据
            byteArrayOutputStream = new ByteArrayOutputStream();
            // 文件输入流
            bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));

            // 读取图片文件中的二进制内容,并将内容写进字节数组输出流
            System.out.println("文件读入中···");
            while ((readLen = bufferedInputStream.read(buffer)) != -1) {
                // 将从文件读取到的二进制数据写进字节数组输出流(byteArrayOutputStream)
                byteArrayOutputStream.write(buffer, 0, readLen);
                fileSize += readLen;
            }
            System.out.println("文件读入成功,文件大小为:" + fileSize + " bytes!");

            // 将得到的 byteArrayOutputStream 转换为一个字符数组
            byte[] array = byteArrayOutputStream.toByteArray();
            // 与服务器端建立连接
            socket = new Socket(InetAddress.getLocalHost(), 6666);
            // 获取输出流,将图片字节数组发送到服务器端
            outputStream = socket.getOutputStream();
            System.out.println("文件发送到服务器中···");
            outputStream.write(array);
            // 写入结束标志
            socket.shutdownOutput();
            System.out.println("文件发送到服务器成功!");

            // 接送服务器端发送的反馈信息并打印
            System.out.print("接收到的服务器信息:");
            inputStream = socket.getInputStream();
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            System.out.println(bufferedReader.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
                inputStream.close();
                outputStream.close();
                bufferedReader.close();
                bufferedInputStream.close();
                byteArrayOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  • 服务器端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


public class FileReceiveServer {
    public static void main(String[] args) {
        Socket socket = null;
        InputStream inputStream = null;
        ServerSocket serverSocket = null;
        OutputStream outputStream = null;
        BufferedWriter bufferedWriter = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        BufferedOutputStream bufferedOutputStream = null;

        try {
            // 监听端口,等待连接
            serverSocket = new ServerSocket(6666);
            System.out.println("服务器已启动,等待连接···");
            socket = serverSocket.accept();

            // 读取到的字节数
            int readLen;
            // 文件大小,单位为字节
            long fileSize = 0;
            // 缓冲字节数组,加快读取数组
            byte[] buffer = new byte[1024];
            // 获得输出流,从输入流中读取客户端发送过来的二进制数组信息
            inputStream = socket.getInputStream();
            // 字节数组输出流,保存从 inputStream 依次读出到的二进制数据
            byteArrayOutputStream = new ByteArrayOutputStream();

            // 从 inputStream 中读取数据
            System.out.println("文件读取中···");
            // 读取 inputStream 中的数据,并将数据写进 byteArrayOutputStream
            while ((readLen = inputStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, readLen);
                fileSize += readLen;
            }
            System.out.println("文件读取成功,总大小为 " + fileSize + " bytes!");

            // 将 byteArrayOutputStream 中的数据转换为字节数组(文件二进制数据)
            byte[] array = byteArrayOutputStream.toByteArray();
            // 将最终得到的字节数组写进文件
            File filePath = new File("C:\Users\Admin\Desktop\temp.jpg");
            System.out.println("文件保存到本地中···");
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(filePath));
            bufferedOutputStream.write(array);
            System.out.println("文件保存到本地成功!保存路径为:" + filePath);

            // 向客户端反馈文件下载保存成功信息
            outputStream = socket.getOutputStream();
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
            System.out.print("发送反馈信息到客户端··· ");
            bufferedWriter.write("文件接收成功,下载保存完成!");
            bufferedWriter.newline();
            bufferedWriter.flush();
            System.out.println("消息发送成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
                inputStream.close();
                outputStream.close();
                serverSocket.close();
                bufferedWriter.close();
                byteArrayOutputStream.close();
                bufferedOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号