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();

    }

}
时间: 2024-12-15 01:51:43

TCP上传文本的相关文章

java TCP上传文本

服务端: package cn.net.tcp; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Sock

TCP、UDP练习题 (UDP聊天程序、TCP上传文本文件和图片文件)

TCP.UDP编程练习 TCP ☆上传文本文件 读取一个本地文本文件,将数据发送到服务端,服务器端对数据进行存储. 存储完毕后,给客户端一个提示. 一.解题思路 客户端:(1) 创建Socket对象----用服务器的ip+端口号 (2)读取文件内容 (3)通过socket把内容发送给服务器端(把socket中的输出流包装成"打印流"来进行发送文本,是一种比较安全的输出方式,不会出现失真.) 服务器端:(1) 创建服务器socket---ServerSocket (2)通过ServerS

TCP上传文件 遇到发现一些问题

public class TCPServerFs implements Runnable{ private Socket s; public TCPServerFs(Socket s) { super(); this.s = s; } @Override public void run() { // TODO Auto-generated method stub //读取文件名 try { InputStream in = s.getInputStream(); //读取上传的文件名 byte[

TCP 上传文件

package liu.net.udpupload; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class 

实现TCP断点上传,后台C#服务实现接收

实现TCP断点上传,后台C#服务实现接收 终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证,一旦断开,无法续传.所以得采用另一种流行的做法,TCP上传大文件. 网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Pos

笔记02 文件上传、文件下载、类型转换器、国际化的支持

Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4. 表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5. Struts2的Action     取得文件名称->>规则:输入域的名称+

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

Struts上传照片到服务器

     关于Struts上传照片的功能,可能很多人都已经接触过了.我记得我之前做过一个上传Jar包的功能,那时候是用SpringMVC做的,先做一个类似于上传的功能,将Jar包添加进行之后解读Jar包,是因为要拿到Jar包里面的类名.属性名和中文注释,但是又没办法手动将所有Jar包拷贝到项目下,所以想着用上传的方式来实现.现在是要做上传照片.将用户的照片保存到服务器的文件夹下,如果该文件夹存在,则直接上传,如果不存在就创建该文件夹然后再上传. 前台代码: <pre name="code

struts(文件上传与下载)

文件上传: 1. Struts2默认采用了apache commons-fileupload.需要引入commons-fileupload相关依赖包: * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 2. 表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 3. Struts2中Action相关属性命名规则: 取得文件名称->>规则:输入域的名称+固定字符串"FileName"