zoukankan      html  css  js  c++  java
  • java【Socket】【上传下载文件】

    public class TCPClient {
        public static void main(String[] args)throws IOException {
            Socket socket = new Socket("127.0.0.1",5000);
            OutputStream out = socket.getOutputStream();
            //创建文件对象     如果文件路径写错   Client报找不到文件异常,Server报Connection Reset异常
            File file = new File("E:\\Pictures\\010.jpg");  
            //字节输入流,读取本地文件到java程序中
            FileInputStream fis = new FileInputStream(file);
            byte[] data = new byte[1024];              //数组,增强传输效率
            int len = 0;
            while((len = fis.read(data)) != -1)   //read方法返回数组的有效字符个数
                out.write(data, 0, len);                              
            socket.shutdownOutput();  //数据传输完毕,关闭socket输出流,避免服务器端read方法阻塞
    
            InputStream in = socket.getInputStream();      //字节输入流,读取服务器返回的数据
            len = in.read(data);
            System.out.println(new String(data,0,len));
    
            socket.close();
            fis.close();
        }
    
       }
    
    
    
       public class TCPServer {
        public static void main(String[] args)throws IOException {
            ServerSocket server = new ServerSocket(5000);//打开服务器制定端口,等待客户端连接
            //获得与服务器相连的套接字对象     套接字:绑定ip地址和端口号的网络对象
            Socket socket = server.accept();
            //查看该地址文件夹是否存在,如果不存在,创建一个
            File file = new File("E:\\TestFolder\\upload"); 
            if(!file.exists()){
                boolean b = file.mkdirs();
                System.out.println(b);
            }   
            InputStream in = socket.getInputStream();  //套接字的字节输入流,读取客户端传过来的数据
    
            String name = System.currentTimeMillis()+""+new Random().nextInt(9999);        //随机文件名
            FileOutputStream fos = new FileOutputStream(file+File.separator+name+".jpg");  //File.separator表示分隔符,windows是\,linux是/             
            byte[] data = new byte[1024];
            int len = 0;
    //如果客户端没有关闭socket输出流,这里的read方法会一直读取,对于socket流没有流末尾之说,不可能返回-1
            while((len = in.read(data)) != -1)  
                fos.write(data, 0, len);
            data = "上传成功!".getBytes();      //字符串转化为字节数组
            OutputStream out = socket.getOutputStream();     //创建字节输出流
            out.write(data);                //写入上传成功  ,反馈给客户端   
            server.close();
            fos.close();
        }
    
    }
    
    
  • 相关阅读:
    数据结构——霍夫曼树及题目场景应用
    算法——模式匹配
    深入理解Java虚拟机(十)——线程安全与锁优化
    深入理解Java虚拟机(九)——后端编译与优化
    算法——计算点集中共线最多点的直线
    算法——移掉K位数字使得数值最小
    算法—— n个骰子的点数
    Java并发编程的艺术(十二)——并发容器和框架
    算法——不用加减乘除符号运算加法
    5章-项目范围管理-day4
  • 原文地址:https://www.cnblogs.com/amize/p/15597691.html
Copyright © 2011-2022 走看看