• 新手学习-网络编程之TCP传输文件


    网络编程之TCP传输文件

    上一篇《网络编程之TCP实现聊天》已经简单介绍了TCP的概念及三次握手、四次挥手的通俗理解方式,这里不再赘述,仅展示Java网络编程中的使用TCP协议实现传输文件。

    代码中:

    "D:\Program Files\ideaIU\IdeaWorkspace\网络编程\girl.jpg" //即将被传输的文件的绝对路径
    "received.jpg"  //接收到文件时将其命名为这个名称

    完整源码如下:

    客户端
    package tcp;

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

    public class FilesClient {
       public static void main(String[] args) throws Exception {

           //创建Socket连接
           InetAddress byName = InetAddress.getByName("127.0.0.1");
           int port = 9000;
           Socket socket = new Socket(byName,port);

           //创建输出流
           OutputStream outputStream = socket.getOutputStream();

           //读取文件
           FileInputStream fileInputStream = new FileInputStream(new File("D:\Program Files\ideaIU\IdeaWorkspace\网络编程\girl.jpg"));

           //写出文件
           byte[] buffer = new byte[2014];
           int length;
           while ((length=fileInputStream.read(buffer))!=-1){
               outputStream.write(buffer,0,length);
          }

           //告诉服务器已经结束
           socket.shutdownOutput();

           //确定服务器接收完毕 才能断开连接
           InputStream inputStream = socket.getInputStream();
               //服务器发过来的是Byte[]
           ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
           byte[] bytes = new byte[2014];
           int len;
           while ((len=inputStream.read(bytes))!=-1){
               byteArrayOutputStream.write(bytes,0,len);
          }
           System.out.println(byteArrayOutputStream.toString());


           //关闭资源
           byteArrayOutputStream.close();
           inputStream.close();
           fileInputStream.close();
           outputStream.close();
           socket.close();
      }
    }

     

    服务端
    package tcp;

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

    public class FilesServer {
       public static void main(String[] args) throws Exception {
           //创建服务
           ServerSocket serverSocket = new ServerSocket(9000);

           //监听客户端的连接
           Socket accept = serverSocket.accept();  //阻塞式监听,会一直等待客户端的连接

           //获取输入流
           InputStream inputStream = accept.getInputStream();

           //文件输出
           FileOutputStream fileOutputStream = new FileOutputStream(new File("received.jpg"));
           int len;
           byte[] bytes = new byte[2014];
           while ((len=inputStream.read(bytes))!=-1){
               fileOutputStream.write(bytes,0,len);
          }

           //通知客户端接收完毕了
           OutputStream outputStream = accept.getOutputStream();
           outputStream.write("我结束了,你可以断开了!".getBytes());

           //关闭资源
           fileOutputStream.close();
           inputStream.close();
           accept.close();
           serverSocket.close();
      }
    }

     

  • 相关阅读:
    JVM内存模型
    学习Spring Boot:(十九)Shiro 中使用缓存
    学习Spring Boot:(十八)Spring Boot 中session共享
    学习Spring Boot:(十七)Spring Boot 中使用 Redis
    学习Spring Boot:(十六)使用Shiro与JWT 实现认证服务
    学习Spring Boot:(十五)使用Lombok来优雅的编码
    学习Spring Boot:(十四)spring-shiro的密码加密
    学习Spring Boot:(十三)配置 Shiro 权限认证
    学习Spring Boot:(十二)Mybatis 中自定义枚举转换器
    学习Spring Boot:(十一) 自定义装配参数
  • 原文地址:https://www.cnblogs.com/awong18/p/13114562.html
Copyright © 2020-2023  润新知