zoukankan      html  css  js  c++  java
  • TCP上传文本

    TCP上传文本其实就是文件的复制,只不过文件复制大多是发生在本地,而上传下载是发生在网络上。

    注:TCP上传文本最要命的一个问题就是:客户端数据发送完毕,而服务端仍然在等待读取。这时,就需要客户端发送结束标记s.shutdownOutput(),该方法其实就是发送给服务端一个结束标记,这个标记也可以自己定义,但是自己定义有可能与发送的内容重复,所以建议使用shutdownxxxput()方法。

    TCP上传文本的客户端:

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    public class UpLoadClient {
    
        public static void main(String[] args) throws Exception, IOException {
    
            /*
             * 上传文本的客户端,读取本地文本数据,发送给服务器端,服务器端接收完毕后回馈“上传成功”字样
             */
            System.out.println("上传文本客户端启动.....");
            //客户端socket
            Socket s = new Socket("192.168.17.1",10001);//绑定要发送的ip地址以及端口号
            
            //1.确定数据源。本地文本文件
            BufferedReader bufr = new BufferedReader(new FileReader("NetSpider.txt"));
            
            //2.确定目的。socket输出流
    //        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            PrintWriter out = new PrintWriter(s.getOutputStream(),true);//自动刷新
            
            String line = null;
            while((line = bufr.readLine())!=null){
                out.println(line);
            }
            //给服务端发送标记
    //        out.println("over");//容易重复
            
            //使用socket的禁用输出流方法。
            s.shutdownOutput();
            
            //3.通过socket读取流获取服务器端返回的数据
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String lineIn = bufIn.readLine();//阻塞式
            System.out.println(lineIn);
            
            //4.关闭
            bufr.close();
            s.close();
            
            
        }
    
    }

    TCP上传文本的服务端:

    import java.io.BufferedReader;
    import java.io.FileWriter;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class UpLoadServer {
    
        public static void main(String[] args) throws Exception {
            
            /*
             * 上传文本的服务端,接收文本数据,并存储到文件中,服务器端接收完毕后,回馈“上传成功”字样
             */
            System.out.println("上传服务端启动....");
            //1.服务端对象
            ServerSocket ss = new ServerSocket(10001);
            
            //2.获取客户端
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"...connected");
            
            //3.获取读取流,确定源,网络socket
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
            
            //4.确定目的
            PrintWriter pw = new PrintWriter(new FileWriter("server.txt"),true);
            
            //5.频繁读写
            String line = null;
            while((line = bufIn.readLine())!=null){
    //            if("over".equals(line)){
    //                break;
    //            }
                pw.println(line);
            }
            
            //6.改客户端反馈信息
            PrintWriter out = new PrintWriter(s.getOutputStream(),true);
            out.println("上传成功");
            
            pw.close();
            s.close();
            ss.close();
            
            
            
        }
    
    }
  • 相关阅读:
    TCP/IP,HTTP,HTTPS,WEBSocket协议
    mysql优化
    PHP基础算法
    php----函数大全
    面试题总结101-)
    扫描一个目录下的所有文件,根据这些文件的创建日期生成一个文件夹,然后把这些文件移入这个文件夹下面
    对执行文件下的文件按照时间
    [合集]解决Python报错:local variable 'xxx' referenced before assignment
    python 函数私有方法
    去哪儿面试题- 一组描述由人组成的网络的测试用例校验是否联通
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5932125.html
Copyright © 2011-2022 走看看