zoukankan      html  css  js  c++  java
  • 使用TCP发送文件

    客户端

    package com.zy.demo3;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class TCPClient {
    
        public static void main(String[] args) throws Exception {//客户端
            // 1创建socket对象
            
            Socket socket = new Socket("localhost", 6666);//Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号。 host写Ip和主机名都可以
    
            //2得到输出流
            OutputStream outputStream = socket.getOutputStream();
            
            
            //3发送数据给服务端
            
            //读取主机上的文件
            //按文件流的方式,先读入内存,在写出去[边读编写]
            FileInputStream fileInputStream = new FileInputStream(new File("E:\弹性表达式.doc"));//本地文件
            byte b[]=new byte[1024];
            int read = fileInputStream.read(b);    
            while(read!=-1){ //-1表示读到末尾了    
                outputStream.write(b);
                read=fileInputStream.read(b);
            }
            //-----------------------------
            //接收响应
            InputStream inputStream = socket.getInputStream();
            byte re[]=new byte[1024];
            inputStream.read(re);
            System.out.println("接收的响应是:"+new String(re).trim());
            
    
            
            //4关闭资源
            outputStream.close();
            socket.close();
        
        
        }
    
    }

    服务端

    package com.zy.demo3;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class TCPServer {//服务端
    
        public static void main(String[] args) throws Exception {
            //基于流
            //1创建serversocket对象
            ServerSocket serverSocket = new ServerSocket(6666);//端口约定6666
            
            //2获取socket对象(客户端)
            Socket accept = serverSocket.accept();//阻塞,即打开服务端后程序会运行到这一行,虚拟灯不灭,等待客户端发送数据
            
            //3得到输入流
            InputStream inputStream = accept.getInputStream();
        
            
            //----------------
            //响应(必须先响应再接收文件,否则客户端和服务端都在阻塞着,虚拟灯一直亮着)
            OutputStream outputStream = accept.getOutputStream();
            outputStream.write("服务端已接收完毕,谢谢客户端".getBytes());
            //---------------------
            
            //4读取客户端发送数据
            //将读取的数据存到本机文件
            File file = new File("E:\接收的文件\1.doc");//接收的文件
            File parentFile = file.getParentFile();
            if (!parentFile.exists()) {
                parentFile.mkdirs();    
            }
            file.createNewFile();
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            
            byte b[]=new byte[1024];
            int read = inputStream.read(b);//返回所占字节数(和FileInputStream一样,读取完毕时也返回-1)
            //边读编写
            while(read!=-1){     
                fileOutputStream.write(b);
                read=inputStream.read(b);
            }
            
            System.out.println("接收完毕");
    
            
            //5关闭资源
            
            accept.close();
            serverSocket.close();
        }
    
    }

     先运行服务端

    再运行客户端

    然后返回服务端

  • 相关阅读:
    ArrayList源码分析_JDK1.8.0_191
    LinkedList源码分析_JDK1.8.0_191
    HashMap源码分析_JDK1.8.0_191
    生产者消费者模型Java实现
    INT整型最小值取负还是本身的问题
    字节跳动面试题
    go sqlx操作数据库问题
    go gin框架调用cmd运行python脚本问题
    Android视频播放不能使用自研播放器
    mac python版本错误问题以及pip版本错误(anacanda)
  • 原文地址:https://www.cnblogs.com/qfdy123/p/11130422.html
Copyright © 2011-2022 走看看