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

}

 

posted on 2016-10-05 13:26  北方丶有佳人  阅读(260)  评论(0编辑  收藏  举报