zoukankan      html  css  js  c++  java
  • TCP协议应用--上传文件

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    
        /* 需求:客户端输入文本文件,服务器输出文本文件
         * 要求给出反馈信息
         * 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢?
         * 重要的一点,客户端写一行,服务器读一行,所以客户端停止写,客户端也就停止读了。
         * 读取文本文件是可以以null作为结束信息的,但是呢,
         * 通道内是不能这样结束信息的。
         * 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了。
         * 
         * 如何解决呢?
         * A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧。
         *      这样做可以解决问题,但是不好。
         * B:Socket对象提供了一种解决方案
         *      public void shutdownOutput()
         * 
         */
    //客户端
        public class ClientDemo {
            public static void main(String[] args) throws IOException{
                //建立客户端socket服务
                Socket s = new Socket("117.64.225.33",33333);
                //封装通道里的写入流
                BufferedWriter bufw = new BufferedWriter
                        (new OutputStreamWriter(s.getOutputStream()));
                //封装要写入的数据
                BufferedReader bufr = new BufferedReader
                        (new FileReader(new File("c:\6.txt")));
                //往通道里写数据
                String line = null;
                while((line = bufr.readLine())!= null){//阻塞式方法
                    bufw.write(line);
                    bufw.newLine();
                    bufw.flush();
                }
        //      //A:自定义一个结束信息
                //这样做不好要是文件中有over这样的字段
                //服务器将读不到后面的数据
        //      bufw.write("over");
        //      bufw.newLine();
        //      bufw.flush();
    
            //Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
            s.shutdownOutput();
            //接受反馈
            BufferedReader brClient = new BufferedReader
                    (new InputStreamReader(s.getInputStream()));
             String info = brClient.readLine();
             System.out.println(info);
            //释放资源
            s.close();
            bufr.close();
        }
    }
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    //客户端输入文本文件,服务器输出文本文件
    //服务器端
    public class ServerDemo {
        public static void main(String[] args) throws IOException {
            //创建服务器端socket对象
            ServerSocket ss = new ServerSocket(33333);
            //监听客户端连接
            Socket s = ss.accept();
            //封装通道里的读取流
            BufferedReader bufr = new BufferedReader
                    (new InputStreamReader(s.getInputStream()));
            //封装一个写入流,将读取到的数据是写入到指定的文件中
            BufferedWriter bufw = new BufferedWriter
                    (new FileWriter(new File("D:\行不行.txt")));
            String line = null;
            while((line = bufr.readLine())!=null){
    //          A:if("over".equals(line)){
    //              break;
    //          }
                bufw.write(line);
                bufw.newLine();
                bufw.flush();
            }
            //
            //反馈
            BufferedWriter bwServer = new BufferedWriter
                    (new OutputStreamWriter(s.getOutputStream()));
            bwServer.write("上传文件成功!");
            bwServer.newLine();
            bwServer.flush();
            //释放资源
            s.close();
            bufw.close();
        }
    }
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    java命令模式
    java中介者模式
    java访问者模式
    java状态模式
    java责任链模式
    java策略模式(及与工厂模式的区别)
    github token 位置
    Yii2 Queue队列
    sz与rz
    vim
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458971.html
Copyright © 2011-2022 走看看