TCP 传输文件

客户端代码

package com.xtsheng.TcpDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
/**
 * @author zxa
 * @version 1.0
 * @date 2020/12/8 19:46
 */
public class TcpClientTest {
    public static void main(String[] args) {
        try {
            //创建socket连接 指定连接服务器ip+端口
            Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9999);
            //获取socket输出流 将文件读取到输出流进行传输
            OutputStream os = socket.getOutputStream();
            //获取要被传输文件的输入流 将文件写入到输出流中
            FileInputStream fis = new FileInputStream(new File("zza.jpg"));
            byte[] bytes = new byte[1024];
            int len;
            while ((len=fis.read(bytes))!=-1){
                os.write(bytes,0,len);
            }
            //告诉服务器写入到输出流中完毕
            socket.shutdownOutput();            
            //关闭连接 其实应该放到finally中
            fis.close();
            os.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

服务端代码

package com.xtsheng.TcpDemo;

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

/**
 * @author zxa
 * @version 1.0
 * @date 2020/12/8 19:53
 */
public class TcpServerTest {
    public static void main(String[] args) {
        try {
            //创建服务器端socket 指定服务所在端口
            ServerSocket serverSocket = new ServerSocket(9999);
            //获取连接到服务器端的socket
            Socket socket = serverSocket.accept();
            //获取socket输入流
            InputStream in = socket.getInputStream();
            //指定写入文件的输出流 写入文件
            FileOutputStream fos = new FileOutputStream(new File("zzzz.jpg"));
            byte[] buffer = new byte[1024];
            int len;
            while ((len=in.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            fos.close();
            in.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
posted @   邹笑傲  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示